当前位置: 首页 > news >正文

实现Chrome Devtools调试JavaScript V8引擎

最近开发小程序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

相关文章:

  • ZABBIX(三) zabbix 支持的主要监控方式
  • 算法导论——动态规划
  • 微信公众号支付 当前url未注册
  • 如何监控主从故障是否正常?MySQL数据库
  • Centos7安装greenplum遇到的问题
  • php配置php_pdo_mysql模块
  • Spring Cloud--Honghu Cloud分布式微服务云系统—云架构代码结构构建
  • 迭代器模式
  • Android 中的子线程解析
  • Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类...
  • 195. Spring Boot 2.0数据库迁移:Flyway
  • opencv python Meanshift 和 Camshift
  • Scala基础
  • mysql进阶(七)数据库锁
  • caffe问题
  • C++入门教程(10):for 语句
  • ES2017异步函数现已正式可用
  • exports和module.exports
  • Fastjson的基本使用方法大全
  • flask接收请求并推入栈
  • gulp 教程
  • JDK 6和JDK 7中的substring()方法
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux gpio口使用方法
  • Logstash 参考指南(目录)
  • Lucene解析 - 基本概念
  • vue-cli在webpack的配置文件探究
  • 机器学习中为什么要做归一化normalization
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 设计模式 开闭原则
  • 使用common-codec进行md5加密
  • 数据科学 第 3 章 11 字符串处理
  • 说说动画卡顿的解决方案
  • 06-01 点餐小程序前台界面搭建
  • 《天龙八部3D》Unity技术方案揭秘
  • AI算硅基生命吗,为什么?
  • # 透过事物看本质的能力怎么培养?
  • (3)(3.5) 遥测无线电区域条例
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (windows2012共享文件夹和防火墙设置
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十八)SpringBoot之发送QQ邮件
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)编辑寄语:因为爱心,所以美丽
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /etc/motd and /etc/issue
  • /etc/shadow字段详解
  • @Query中countQuery的介绍
  • @selector(..)警告提示
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...