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 文件中找到或最终由其运行的代码)将在主进程中运行,而其他代码将在其各自的渲染器进程中执行。
您可以在调试时附加到多个程序,但任何时候只有一个程序在调试器中处于活动状态。您可以在 调试位置 工具栏或 进程窗口 中设置活动程序。
使用 ProcMon 观察进程
虽然 Visual Studio 非常适合检查特定的代码路径,但 ProcMon 的优势在于观察您的应用程序与操作系统所做的一切 - 它捕获进程的文件、注册表、网络、进程和分析详细信息。它尝试记录 所有 发生的事件,可能会让人不知所措,但如果您想了解您的应用程序对操作系统所做的事情以及如何做,它将是一个宝贵的资源。
有关 ProcMon 的基本和高级调试功能的介绍,请查看微软提供的此视频教程。
使用 WinDbg
可以使用 WinDbg 调试渲染器进程中的崩溃和问题。
要附加到并调试进程,请使用 WinDbg
- 将
--renderer-startup-dialog作为命令行标志添加到 Electron。 - 启动您打算调试的应用程序。
- 将出现一个对话框,其中包含 pid:“渲染器正在启动,pid:1234”。
- 启动 WinDbg,然后在应用程序菜单中选择“文件 > 附加到进程”。
- 在步骤 3 的对话框中输入 pid。
- 请注意,调试器将处于暂停状态,并且应用程序中有一个命令行可用于输入文本。
- 在上面的命令行中键入“g”以启动被调试程序。
- 按 Enter 键继续程序。
- 返回对话框并按“确定”。