实现Chrome Devtools调试JavaScript V8引擎

简介: 最近开发小程序JavaScript的运行时,通过在客户端嵌入JavaScript V8引擎来实现。前端同学需要调试JavaScript代码,正好Chrome浏览器的Devtools是与V8的Inspector调试协议是一脉相承的,理论上是可以使用Chrome Devtools调试JavaScript V8引擎。 [V8的文档](https://github.com/v8/v8/wiki/De

最近开发小程序JavaScript的运行时,通过在客户端嵌入JavaScript V8引擎来实现。前端同学需要调试JavaScript代码,正好Chrome浏览器的Devtools是与V8的Inspector调试协议是一脉相承的,理论上是可以使用Chrome Devtools调试JavaScript V8引擎。

V8的文档里提到可以把Chrome Devtools作为调试器的前端来调试JavaScript。d8工程里虽然有个例子,但是无法run起来。写一下我实现。

v8-inspector1.PNG

InspectorAgent创建一个Websocket服务,假设打开一个9224端口等待调试器前端连接。Chrome浏览器打开chrome-devtools://devtools/bundled/inspector.html?ws=127.0.0.1:9224就会呈现一个Devtools调试页面。点击页面上的Reconncet DevTools按钮,Devtools通过Websocket连接上InspectorAgent。InspectorAgent把来自Devtools的消息通过v8_inspector::V8InspectorSession的dispatchProtocolMessage转发给V8调试后端。然后V8调试后端通过v8_inspector::V8Inspector::Channel接口发消息给Devtools。
InspectorAgent在中间仅仅扮演消息转发的角色。

v8-inspector2.PNG

这里有两个细节:

  • 在创建context的时候,需要指定一个名字,这个会在devtools的Sources栏显示。不指定名字的话,则通过debugger:///VMXX找到,不够方便
  • 调试器的断点,单步调试支持,需要实现V8InspectorClient的runMessageLoopOnPause,quitMessageLoopOnPause等方法

最后效果如下图:
v8-inspector3.PNG

v8-inspector4.PNG

目录
相关文章
|
3月前
|
Web App开发 JavaScript 前端开发
chrome调试秘籍,让你的开发速度飞起来
chrome调试秘籍,让你的开发速度飞起来
|
5月前
|
JavaScript
Sublime Text3 直接运行js调试控制台
Sublime Text3 直接运行js调试控制台
|
6月前
|
Web App开发 开发者
利用chrome控制台调试post请求
利用chrome控制台调试post请求
147 0
|
1月前
|
Web App开发 前端开发 JavaScript
控制台出现报错DevTools failed to load source map: Could not load content for chrome-extension://的原因及解决方案
控制台出现报错DevTools failed to load source map: Could not load content for chrome-extension://的原因及解决方案
42 0
控制台出现报错DevTools failed to load source map: Could not load content for chrome-extension://的原因及解决方案
|
3月前
|
Web App开发 前端开发 JavaScript
超实用的Chrome DevTools调试技巧
超实用的Chrome DevTools调试技巧
|
1月前
|
Web App开发 前端开发 JavaScript
防止你的 Web 应用被别人通过 Chrome 开发者工具进行调试的一种简单办法
防止你的 Web 应用被别人通过 Chrome 开发者工具进行调试的一种简单办法
30 0
|
2月前
|
JavaScript 开发者
JS逆向 -- 本地调试
JS逆向 -- 本地调试
14 0
|
2月前
|
JavaScript 数据安全/隐私保护 开发者
JS逆向 -- 动态调试
JS逆向 -- 动态调试
17 1
|
3月前
|
Web App开发 前端开发 JavaScript
探索 V8 引擎的内部:深入理解 JavaScript 执行的本质
探索 V8 引擎的内部:深入理解 JavaScript 执行的本质
探索 V8 引擎的内部:深入理解 JavaScript 执行的本质
|
4月前
|
前端开发 JavaScript
idea 对JavaScript进行debug调试
idea 对JavaScript进行debug调试