【问题标题】:Can't get breakpoints on XmlHttpRequest module working (Javascript engine/XHR requests)无法在 XmlHttpRequest 模块工作(Javascript 引擎/XHR 请求)上获得断点
【发布时间】:2018-01-09 03:44:51
【问题描述】:

重要提示:请不要给出与在 Google Chrome 的 DevTools 调试器中设置 Javascript 断点相关的答案。我试图让断点在 Chromium 开源浏览器的 C++ 源代码中工作,而不是在 DevTools 调试器中。

我正在尝试在以下模块中设置断点,因此我无法捕获由 Chromium 托管的页面中运行的 Javascript 代码发出的 XHR 请求:

C:\Users\realsensible\Documents\chromium\src\third_party\WebKit\Source\core\xmlhttprequest

我在该模块中几乎每个显着方法上都设置了断点,但它们从未被命中。 PhistucK 指出,Chrome 启动了多个进程,执行 Javascript 引擎的进程很可能与 VS 启动的主进程不是同一个进程,从而打断了断点。

为了尝试测试这一点,我在 VS 之外启动了 Chrome.exe。然后我尝试附加到我在 VS 附加到进程列表框中看到的每个“chrome”进程(我通过还在任务管理器中列出“chrome”进程来仔细检查此进程列表)。有 5 个名为“chrome”的进程; “主” chrome 进程和它启动的四个子进程。对于每个过程我:

1) 附加到来自 VS 的 chrome 进程之一,我的断点在几乎所有重要的 XmlHttpRequest 方法上都处于活动状态。 2)(重新)加载了一个网页,我知道该网页从 Javascript 发出许多 XHR 请求。 3) 脱离进程

在所有 5 次试验中,没有个断点被命中。

注意,我在项目中与 Javascript 引擎无关的其他模块上设置了断点,它们确实工作。显然这只是我无法触发断点的 Javascript 相关代码。

有谁知道如何在 Chromium 中为 Javascript 引擎设置断点?

【问题讨论】:

  • “断点”是什么意思?您是否在运行 chromium 实例时编辑 chromium 源文件? “为了尝试测试,我启动了 Chrome.exe” 问题与铬或铬有关吗?如果您正在启动“Chrome.exe”,为什么问题会被标记为 chromium?你想达到什么目的?
  • 注意 Chrome 和 Chromium 是两种不同的浏览器 What Is The Difference Between Google Chrome And Chromium Browser?
  • @guest271314 - 我正在使用位于此位置的 Chromium 开源浏览器的源代码:chromium.org/developers/how-tos/get-the-code 我在源代码中设置了断点,但我没有更改源代码。 Chromium 整体解决方案中浏览器项目的默认可执行文件名称是 chrome.exe。
  • “我在源代码中设置了断点,并没有更改源代码。” 没有收集你的意思?您能否将您在问题中调整的代码包含在内?
  • 你的意思是你修改了cs.chromium.org/chromium/src/third_party/WebKit/Source/core/…目录下的文件?

标签: c++ visual-studio breakpoints chromium v8


【解决方案1】:

在 Windows 上调试 Chromium 并专门用于在渲染器进程中设置断点的官方说明在这里:https://www.chromium.org/developers/how-tos/debugging-on-windows#TOC-Multi-process-issues。 您尝试过哪些步骤?

另外,澄清一下:JavaScript 引擎是 V8,它位于 <chromium>\src\v8。它对XMLHttpRequest 一无所知,因为那不是ECMAScript 的特性。 <chromium>\src\third_party\WebKit\ 中的代码是 Blink,HTML 渲染引擎。它包含 XHR 的实现(以及许多其他内容),并通过称为“绑定”的层使其可用于 JavaScript 代码。 (对于在渲染器进程中设置断点,这种区别是无关紧要的,因为过程始终相同。)

【讨论】:

  • 谢谢!该文档为我提供了使断点工作所需的内容。顺便说一句,Chromium 经常崩溃并出现一个空的模式对话框(框中唯一的内容是字形/图标,没有文本消息),并且在浏览器中我得到臭名昭著的“Aww,出了点问题”页面重新加载按钮。见过。
  • 我已经看到并调试了很多渲染器崩溃,但没有看到任何空的模式对话框。
  • @jrmk 谢谢。如果您碰巧知道哪些代码模块会抛出这些框,请告诉我(假设它位于代码的中心)。无论如何,我感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2017-03-21
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多