博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现Chrome Devtools调试JavaScript V8引擎
阅读量:5924 次
发布时间:2019-06-19

本文共 812 字,大约阅读时间需要 2 分钟。

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

转载地址:http://kyovx.baihongyu.com/

你可能感兴趣的文章
Host主机头攻击&&点击劫持
查看>>
Unicide编码
查看>>
Android 在Activity中对SQLite的操作
查看>>
ZERO 笔试
查看>>
价值百万的企业大数据分析报告是如何炼成的?
查看>>
Restful架构
查看>>
机器学习算法学习---处理聚类问题常用算法(二)
查看>>
3n+1
查看>>
递归与内置函数
查看>>
UIView和layer的区别
查看>>
.NET 浅谈EXCEL上传
查看>>
Android 自定义view中的属性,命名空间,以及tools标签
查看>>
extjs中使用ItemSelector 控件(从左边选到右边)
查看>>
SpringBoot中遇到的一些问题
查看>>
java中的奇葩 “:”
查看>>
技术笔记:XMPP之openfire+spark+smack
查看>>
同引擎mysql数据库转导快
查看>>
@RequestMapping
查看>>
P1434 滑雪(记忆化搜索)
查看>>
vue父组件给子传参
查看>>