javascript
实现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起來。寫一下我實現。
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等方法
最后效果如下圖:
原文鏈接?
本文為云棲社區原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的实现Chrome Devtools调试JavaScript V8引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在阿里云上构建一个合适的Kubern
- 下一篇: 阿里程序员深夜智救31楼跳楼邻居