跳转到主要内容

Windows 上的调试

如果您在 Electron 中遇到崩溃或问题,并且您认为这些问题不是由您的 JavaScript 应用程序引起的,而是由 Electron 本身引起的,那么调试可能会有点棘手,尤其是对于不习惯原生/C++ 调试的开发人员。但是,使用 Visual Studio、Electron 的托管符号服务器和 Electron 源代码,您可以启用逐步调试,并在 Electron 源代码中设置断点。

另请参阅:Chromium 开发者网站上有大量关于调试 Chromium 的信息,其中许多也适用于 Electron:在 Windows 上调试 Chromium

要求

  • Electron 的调试构建:最简单的方法通常是自己构建它,使用 Windows 的构建说明中列出的工具和先决条件。虽然您可以像下载 Electron 一样附加到它并对其进行调试,但您会发现它经过了高度优化,这使得调试变得更加困难:调试器将无法向您显示所有变量的内容,并且由于内联、尾调用和其他编译器优化,执行路径可能会显得奇怪。

  • 带 C++ 工具的 Visual Studio:Visual Studio 2013 和 Visual Studio 2015 的免费社区版本都可以使用。安装后,配置 Visual Studio 使用 Electron 的符号服务器。这将使 Visual Studio 能够更好地理解 Electron 内部发生的事情,从而更容易以人类可读的格式呈现变量。

  • ProcMon免费的 SysInternals 工具允许您检查进程的参数、文件句柄和注册表操作。

附加到 Electron 并进行调试

要开始调试会话,请打开 PowerShell/CMD 并使用您的 Electron 调试版本执行它,将应用程序作为参数传递。

$ ./out/Testing/electron.exe ~/my-electron-app/

设置断点

然后,打开 Visual Studio。Electron 不是用 Visual Studio 构建的,因此不包含项目文件 - 但您可以“打开文件”来打开源代码文件,这意味着 Visual Studio 会单独打开它们。您仍然可以设置断点 - Visual Studio 将自动检测到源代码与附加进程中正在运行的代码匹配,并相应地中断。

相关代码文件可在 ./shell/ 中找到。

附加

您可以将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程。在进程运行后,单击“调试 / 附加到进程”(或按 CTRL+ALT+P)打开“附加到进程”对话框。您可以使用此功能调试在本地或远程计算机上运行的应用程序,同时调试多个进程。

如果 Electron 在不同的用户帐户下运行,请选中“显示所有用户的进程”复选框。请注意,根据您的应用程序打开了多少个 BrowserWindows,您会看到多个进程。一个典型的单窗口应用程序会导致 Visual Studio 显示两个 Electron.exe 条目 - 一个用于主进程,一个用于渲染器进程。由于列表中仅提供名称,目前没有可靠的方法可以确定哪个是哪个。

应该附加到哪个进程?

在主进程中执行的代码(即,在您的主 JavaScript 文件中或最终由主 JavaScript 文件运行的代码)将在主进程中运行,而其他代码将在其各自的渲染器进程中执行。

在调试时,您可以附加到多个程序,但一次只有一个程序在调试器中处于活动状态。您可以在 调试位置 工具栏或 进程窗口 中设置活动程序。

使用 ProcMon 监视进程

虽然 Visual Studio 在检查特定代码路径方面非常出色,但 ProcMon 的真正优势在于监视应用程序与操作系统交互的所有内容 - 它会捕获进程的文件、注册表、网络、进程和性能详细信息。它试图记录发生的所有事件,可能非常令人不知所措,但如果您想了解应用程序对操作系统的操作以及如何操作,它可能是一个有价值的资源。

有关 ProcMon 基本和高级调试功能的介绍,请查看 Microsoft 提供的此视频教程

使用 WinDbg

可以使用 WinDbg 调试渲染器进程中的崩溃和问题。

使用 WinDbg 附加到进程进行调试

  1. --renderer-startup-dialog 作为命令行标志添加到 Electron。
  2. 启动您打算调试的应用程序。
  3. 将出现一个对话框,其中包含 pid:“Renderer starting with pid: 1234”。
  4. 启动 WinDbg,然后在应用程序菜单中选择“文件 > 附加到进程”。
  5. 在第 3 步的对话框中输入 pid。
  6. 看到调试器将处于暂停状态,并且应用程序中有一个命令行可供输入文本。
  7. 在上述命令行中键入“g”以启动被调试程序。
  8. 按 Enter 键继续程序。
  9. 返回到对话框并按“确定”。