跳转到主要内容

Windows 上的调试

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

另请参阅:Chromium 开发者网站上关于在 Windows 上调试 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 在不同的用户帐户下运行,请选择 显示所有用户的进程 复选框。请注意,根据您的应用程序打开的 BrowserWindow 的数量,您将看到多个进程。典型的单窗口应用程序将导致 Visual Studio 显示两个 Electron.exe 条目 - 一个用于主进程,一个用于渲染器进程。由于列表中只显示名称,目前没有可靠的方法可以确定哪个是哪个。

应该附加到哪个进程?

在主进程中执行的代码(即,在您的主 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. 返回对话框并按“确定”。