實現ChromeDevtools除錯JavaScriptV8引擎
最近開發小程式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等方法
最後效果如下圖:
相關文章
- 硬核除錯實操 | 手把手帶你實現 Serverless 斷點除錯除錯Server斷點
- web實現串列埠除錯助手Web串列埠除錯
- Linux—gdb除錯簡單實現Linux除錯
- 通過JLINK實現串列埠顯示除錯串列埠除錯
- SpringBoot整合devtools實現熱部署除錯Spring Bootdev熱部署除錯
- [Win32]一個偵錯程式的實現(五)除錯符號Win32除錯符號
- 自己實現鬥地主引擎
- 自己動手實現java斷點/單步除錯(一)Java斷點除錯
- 自己動手實現java斷點/單步除錯(二)Java斷點除錯
- 如何使用 Visual Studio Code 除錯 Angular Schematics 實現除錯Angular
- 實現和除錯 Malloc、Free、Calloc 和 Realloc 的快速教程除錯
- 除錯篇——除錯物件與除錯事件除錯物件事件
- 【推理引擎】在 VS Code 除錯 ONNXRuntime 的測試單元除錯
- 惡搞:實時除錯JavaScript除錯JavaScript
- .Net for Spark 實現 WordCount 應用及除錯入坑詳解Spark除錯
- 使用 Nginx 自己實現一個 Web 除錯代理伺服器NginxWeb除錯伺服器
- [docker+gdb] 除錯 PHP 原始碼,看 strval 函式 C 實現Docker除錯PHP原始碼函式
- 基於VEH&除錯暫存器實現無痕HOOK(5)除錯Hook
- Pycharm連線遠端伺服器並實現遠端除錯PyCharm伺服器除錯
- 三步教你實現MyEclipse的debug遠端除錯Eclipse除錯
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 前端模板引擎的實現總結前端
- JVM高階效能除錯實戰JVM除錯
- git刪除本地分支出現錯誤Git
- Windows windbg kernel debug 雙機核心除錯 - USB3.0 除錯 USB除錯 除錯線Windows除錯
- UE乾貨| UE虛幻引擎除錯神器—控制元件反射器除錯控制元件反射
- windbg的時間旅行實現對 C# 程式的終極除錯C#除錯
- find 命令刪除冗餘 Nginx 錯誤日誌並實現備份Nginx
- 單步除錯找到 cy.visit 的實現原始碼(二) - WebSocket?除錯原始碼Web
- 22 真機除錯bug(除錯包)除錯
- gdb除錯命令小結_與多檔案除錯_遠端除錯除錯
- 使用DOM解析來實現PHP模版引擎PHP
- KOA的簡易模板引擎實現方式
- innodb儲存引擎鎖的實現(一)儲存引擎
- RedisSyncer同步引擎的設計與實現Redis
- 如何用Go快速實現規則引擎Go
- 實現一個簡單的模板引擎
- 說說如何實現一個模板引擎