實現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斷點
- Linux—gdb除錯簡單實現Linux除錯
- SpringBoot整合devtools實現熱部署除錯Spring Bootdev熱部署除錯
- 如何使用 Visual Studio Code 除錯 Angular Schematics 實現除錯Angular
- IDA+WSL2實現本地linux動態除錯Linux除錯
- 除錯篇——除錯物件與除錯事件除錯物件事件
- 【推理引擎】在 VS Code 除錯 ONNXRuntime 的測試單元除錯
- 自己動手實現java斷點/單步除錯(一)Java斷點除錯
- 自己動手實現java斷點/單步除錯(二)Java斷點除錯
- 自己實現鬥地主引擎
- .Net for Spark 實現 WordCount 應用及除錯入坑詳解Spark除錯
- Windows windbg kernel debug 雙機核心除錯 - USB3.0 除錯 USB除錯 除錯線Windows除錯
- SpringBoot Serverless 實戰 | 監控除錯Spring BootServer除錯
- 單步除錯找到 cy.visit 的實現原始碼(二) - WebSocket?除錯原始碼Web
- 基於VEH&除錯暫存器實現無痕HOOK(5)除錯Hook
- [docker+gdb] 除錯 PHP 原始碼,看 strval 函式 C 實現Docker除錯PHP原始碼函式
- Pycharm連線遠端伺服器並實現遠端除錯PyCharm伺服器除錯
- git刪除本地分支出現錯誤Git
- IsDebuggerPresent的反除錯與反反除錯除錯
- Python 程式碼除錯—使用 pdb 除錯Python除錯
- UE乾貨| UE虛幻引擎除錯神器—控制元件反射器除錯控制元件反射
- windbg的時間旅行實現對 C# 程式的終極除錯C#除錯
- find 命令刪除冗餘 Nginx 錯誤日誌並實現備份Nginx
- nginx 錯誤除錯Nginx除錯
- Android 除錯實戰與原理詳解Android除錯
- GDB除錯-從入門到實踐除錯
- [實用] 如何配置 iview 除錯環境View除錯
- Android adb除錯出現:opendir failed, Permission deniedAndroid除錯AI
- Xcode斷點除錯出現的問題XCode斷點除錯
- 真機除錯出現 application installation failed 錯誤 解決方案除錯APPAI
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 前端模板引擎的實現總結前端
- 除錯toybox除錯
- Linux除錯Linux除錯
- postman除錯Postman除錯
- gdb除錯除錯
- 前端除錯前端除錯
- python 除錯Python除錯