Windows 上的调试¶
如果你在 Electron 中遇到崩溃或问题,并且你认为这些问题不是由你的 JavaScript 应用引起的,而是由 Electron 本身引起的,那么调试可能会有一些难度,尤其对于不习惯原生/C++ 调试的开发者来说。不过,使用 Visual Studio、Electron 托管的 Symbol Server 以及 Electron 源代码,你可以在 Electron 源代码内部设置断点并启用单步调试。
另请参阅:Chromium 开发者网站上有关于调试 Chromium 的大量信息,其中许多也适用于 Electron:在 Windows 上调试 Chromium。
要求¶
-
Electron 调试版本:最简单的方式通常是使用 Windows 构建说明 中列出的工具和前置条件自行构建。虽然你可以直接下载 Electron 并附加到它进行调试,但你会发现它经过了高度优化,使调试难度显著增加:调试器将无法显示所有变量的内容,并且由于内联、尾调用和其他编译器优化,执行路径可能看起来很奇怪。
-
带有 C++ Tools 的 Visual Studio:Visual Studio 2013 和 Visual Studio 2015 的免费社区版都可以使用。安装完成后,配置 Visual Studio 使用 Electron 的 Symbol server。这将使 Visual Studio 更好地理解 Electron 内部发生的情况,从而更容易以人类可读的格式显示变量。
-
ProcMon:免费的 SysInternals 工具 允许你检查进程的参数、文件句柄和注册表操作。
附加到 Electron 并进行调试¶
要开始调试会话,请打开 PowerShell/CMD,并运行你的 Electron 调试版本,将待打开的应用程序作为参数传入。
设置断点¶
然后,打开 Visual Studio。Electron 不是使用 Visual Studio 构建的,因此不包含项目文件——不过,你可以以“作为文件”方式打开源代码文件,这意味着 Visual Studio 会单独打开它们。你仍然可以设置断点——Visual Studio 会自动识别出源代码与附加进程中运行的代码相匹配,并相应地中断。
相关代码文件位于 ./shell/ 中。
附加¶
你可以将 Visual Studio 调试器附加到本地或远程计算机上正在运行的进程。进程运行后,点击“调试 / 附加到进程”(或按 CTRL+ALT+P)打开“附加到进程”对话框。你可以使用此功能调试运行在本地或远程计算机上的应用,同时调试多个进程。
如果 Electron 正在不同的用户账户下运行,请选择 Show processes from all users 复选框。请注意,根据应用打开的 BrowserWindows 数量,你会看到多个进程。典型单窗口应用会导致 Visual Studio 显示两个 Electron.exe 条目——一个用于主进程,一个用于渲染进程。由于列表只提供名称,目前没有可靠的方法区分哪个是哪个。
我应该附加到哪个进程?¶
在主进程中执行的代码(即位于你的主 JavaScript 文件中或最终由该文件运行的代码)将在主进程中运行,而其他代码将在各自的渲染进程中执行。
调试时,你可以附加到多个程序,但调试器中任何时刻只有一个程序处于活动状态。你可以在 Debug Location 工具栏或 Processes window 中设置活动程序。
使用 ProcMon 观察进程¶
虽然 Visual Studio 非常适合检查特定代码路径,但 ProcMon 的优势在于观察你的应用程序与操作系统交互的所有内容——它会捕获进程的 File、Registry、Network、Process 和 Profiling 详细信息。它试图记录所有发生的事件,可能会令人应接不暇,但如果你希望了解你的应用程序对操作系统做了什么以及是如何做的,它可以是一个非常有价值的资源。
要了解 ProcMon 的基本和高级调试功能介绍,请查看 Microsoft 提供的此视频教程。
使用 WinDbg¶
可以使用 WinDbg 调试渲染进程中的崩溃和问题。
若要使用 WinDbg 附加到要调试的进程:
- 将
--renderer-startup-dialog作为命令行标志添加到 Electron。 - 启动你打算调试的应用程序。
- 将出现一个包含 pid 的对话框:“Renderer 正在以 pid 1234 启动”。
- 启动 WinDbg,并在应用程序菜单中选择“文件 > 附加到进程”。
- 输入第 3 步对话框中的 pid。
- 你会看到调试器处于暂停状态,并且应用中有一个命令行可输入文本。
- 在上述命令行中输入“g”以启动被调试程序。
- 按回车键继续运行程序。
- 返回对话框并按“确定”。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron