美文网首页我是程序员
实现Chrome Devtools调试JavaScript V8

实现Chrome Devtools调试JavaScript V8

作者: 阿里云云栖号 | 来源:发表于2018-07-25 16:09 被阅读61次

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

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

    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在中间仅仅扮演消息转发的角色。

    这里有两个细节:

    -- 在创建context的时候,需要指定一个名字,这个会在devtools的Sources栏显示。不指定名字的话,则通过debugger:///VMXX找到,不够方便

    -- 调试器的断点,单步调试支持,需要实现V8InspectorClient的runMessageLoopOnPause,quitMessageLoopOnPause等方法

    最后效果如下图:

    本文作者:gclxry

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:实现Chrome Devtools调试JavaScript V8

        本文链接:https://www.haomeiwen.com/subject/hsdpmftx.html