由于Chromium具有多进程架构,因此调试起来可能具有挑战性 。当您在调试器中选择 “运行”时,将仅调试主浏览器进程。实际呈现网页(Renderer)和插件的代码将在尚未调试的单独进程中进行。要想调试子进程还需要一些改造,我比较喜欢使用自动附加到子进程办法。
1、自动附加到子进程
Microsoft的Child Process Debugging Power Tool 是对此的独立扩展,而 VsChromium 是捆绑了许多其他附加功能的另一个选项。您还必须以管理员身份运行Visual Studio,否则它将无提示地无法附加到Chrome的某些子进程。
2、手动附加到子进程
您可以使用调试器附加到正在运行的子进程。选择 工具>附加到进程 ,然后单击 要附加到的 chrome.exe进程。在附加之前,请确保 在附加到流程时仅选择了本机代码。这是通过在“附加到流程” 窗口中单击“ 选择… ” 并仅选中“本机”来完成的。如果您忘记了这一点,它可能会尝试以“ WebKit”模式附加以调试JavaScript,并且您会收到一条错误消息“在当前状态下,n操作不合法”。
现在,您可以像调试两个进程一样调试它们。 在调试多个进程时,请打开“ 调试”>“ Windows”>“进程” 窗口以在它们之间切换。
有时,您正在调试仅在启动时才会发生的事情,并希望在子进程启动后立即对其进行查看。使用:
--renderer-startup-dialog --no-sandbox
您必须禁用沙箱,否则将禁止显示对话框。出现对话框时,请访问“ 工具”>“附加到进程”, 然后附加到显示“ Renderer启动”对话框的进程。现在,您正在渲染器中进行调试,并且可以通过在对话框中按“确定”来继续执行。
其他子进程类型也存在启动对话框:-- gpu-startup-dialog,-- ppapi-startup-dialog,-- plugin-startup-dialog(用于NPAPI)。
3、半自动将调试器附加到子进程
以下参数使子进程在繁忙循环中等待60秒,以便调试器将其附加到该进程。一旦任一条件成立,它将继续进行;没有异常被抛出。
--wait-for-debugger-children [=过滤器]
过滤器(如果提供)仅在将–type参数与进程匹配时才会触发。值包括渲染器,插件(用于NPAPI),ppapi ,gpu-process和 Utility 。
使用此选项时,使用以下方法来限制生成的渲染器进程的数量可能会有所帮助:
--renderer-process-limit = 1