在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

揭秘Chrome DevTools:從原理到自定義調試工具

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2025-03-04 14:49 ? 次閱讀

引言

Chrome DevTools 是前端開發者的必備工具,不僅可以用于調試 Chrome 網頁,還支持 Android WebView、Roma (跨平臺開發框架) 安卓&鴻蒙 等平臺的調試。 作為最常用的調試工具之一,DevTools 不僅能快速定位問題,還能讓我們深入了解調試的內部機制。本文將從原理、組成部分、CDP 協議以及自定義調試工具的實現, 帶你全面認識 DevTools。

wKgZPGfGolKAd2yrAAGrSZIO2dM672.png

Android WebView Devtools adb調試過程

1. DevTools的組成與原理

1.1 DevTools組成部分

Chrome DevTools主要由以下幾個部分組成:

?Frontend 前端界面:用戶交互的界面,提供各種調試功能。

?Backend 后端服務:與瀏覽器內核通信(如Chromium、V8等),執行調試命令, 通過CDP與前端界面交互。

?CDP(Chrome DevTools Protocol):Chrome調試工具協議(JSON 格式的數據封裝協議)。

wKgZO2fGolSAVMKYAAEBbMJliGE634.png

1.2 工作原理

DevTools 的核心是基于 Chrome DevTools Protocol (CDP), 工作原理可以簡單概括為:前端界面通過CDP協議與瀏覽器內核通信,發送調試命令并接收調試信息。瀏覽器內核根據接收到的命令執行相應的操作,并將結果返回給前端界面。

2. CDP協議詳解

2.1 什么是CDP協議?

CDP(Chrome DevTools Protocol)是Chrome DevTools與瀏覽器內核通信的協議。它基于WebSocket,允許開發者通過發送JSON格式的命令來控制瀏覽器行為,并獲取調試信息。 通過 CDP,DevTools 能夠實時與頁面交互,實現斷點調試、性能分析等功能。

2.2 CDP協議的核心特點

?基于JSON-RPC:CDP協議使用JSON格式傳輸數據,簡單易讀。

?雙向通信:不僅調試器可以發送命令,瀏覽器也會主動推送事件(比如斷點觸發、網絡請求完成)。

?模塊化設計:CDP協議分為多個模塊(如DOM、Network、Runtime等),每個模塊負責不同的功能。

2.3 CDP協議的主要功能

?DOM操作和CSS:獲取、修改DOM結構和CSS樣式。

?網絡監控:監控網絡請求和響應。

?JavaScript調試:設置斷點、單步執行、查看調用棧等。

?性能分析:分析頁面加載性能、JavaScript執行性能等。

?內存管理:檢查和分析內存使用情況,查找內存泄漏等。

2.4 CDP協議的工作流程

1.建立WebSocket連接:通過WebSocket與瀏覽器內核建立連接。

2.發送協議命令:前端界面發送JSON格式的命令。

3.執行協議命令:瀏覽器內核執行命令并返回結果。

4.接收結果:前端界面接收并顯示結果。

3. 了解CDP傳輸協議信息

3.1 啟動工具

啟用協議日志,DevTools的設置中勾選“rotocol Montor

wKgZPGfGolWAHHGMAADg4FljUZw787.png

wKgZPGfGoliAW46nAAWdkAdKRM8809.png

刷新頁面打開協議工具

wKgZO2fGoluAIIAFAAoRuQZImb4081.png

查看協議的主要內容,此時此刻就可以看到協議交互為JSON格式

wKgZO2fGol6ASF2OAAvrXSKS_68173.png

3.2 分析CDP內容

當我們點擊代碼左邊設置斷點后,可以看到前端(Devtools面板)請求內容:

wKgZPGfGomCALBOuAAHC63kyhOM063.png

以及后端返回結果:

wKgZO2fGomKAX4J9AAL4yE59CxQ481.png

4. 自定義調試工具

4.1 為何需要自定義調試工具?

1. DevTools 的局限性

?針對網頁設計:DevTools 是為網頁開發設計的,其功能(如 DOM 檢查、CSS 調試、網絡請求分析等)主要圍繞 HTML、CSS 和 JavaScript 展開。對于非網頁應用(如自定義語言、桌面應用、嵌入式系統等),這些功能可能不適用。

?無法直接調試非網頁應用:DevTools 依賴于瀏覽器的運行時環境(如 V8 引擎)和 Chrome DevTools Protocol (CDP)。如果應用不是運行在瀏覽器中,或者使用了非 JavaScript 語言,DevTools 無法直接調試,比如 Roma 安卓和鴻蒙端在采用的App內嵌入V8引擎,因此無法直接調試。

2. 自定義調試工具的需求

?支持自定義語言或框架:如果應用使用了自定義 DSL(領域特定語言)或其他編程語言(如 PythonC++ 等),需要開發專門的調試工具來支持這些語言的語法、運行時和調試功能。

?特定領域的調試需求:某些應用場景(如物聯網設備調試、定制與自身業務結合的開發調試工具等)可能需要特定的調試功能,而這些功能在 DevTools 中并不存在。

?跨平臺支持:可以為不同平臺(例如 Roma AndroidiOSHarmony)開發統一的調試工具。

4.2 其中的技術挑戰

除了CDP協議外還需要實現:

?消息通道:調試工具需要在前端和后端之間建立可靠的消息通道,用于傳輸調試信息(如斷點、變量值、調用棧等)。

?運行時環境集成:對于非 JavaScript 語言,需要將調試模塊集成到運行時環境中(如 V8 引擎、Python 解釋器等),以支持斷點、單步執行、變量檢查等功能。

4.3 手搓自定義調試

基于CDP, 實現自定義調試工具:

wKgZPGfGomSAW9aBAApph27FdtI935.png

1. 建立 WebSocket 通信層: 與DevTools調試面板建立通信。

wKgZO2fGomaAXXqrAATPBZObN-A542.png

2. 完成瀏覽器Discovery協議:在瀏覽器中可以顯示應用。

wKgZPGfGomiAAbFzAAMzeRrB8FU539.png

wKgZO2fGomyAFtD-AAO6CQLUDUQ706.png

3. 完善/轉發CDP協議:

V8中已自帶了inspector能力,對于代碼的調試協議大多不需要我們處理,對于inspector外的協議需要單獨處理,例如 Console、Page等。 其他語言庫如未實現inspector,需要單獨實現inspector部分,例如 QuickJS。

wKgZPGfGom-AZSJBAA9EYrn9z5I508.png

4. 處理/轉發CDP協議:例如獲取 設置斷點、取消斷點、發起網絡請求。

實現每一個CDP協議消息的發送與相應,例如 setBreakpointByUrl 協議完成 接收DevTools設置斷點到V8中。

wKgZO2fGonOAMLizABUNQ5qrqzg523.png

5. Devtools進行擴展:

基于CDP 定制自己的頁面 或 自定義協議命令,比如Roma Android調試中可以輸入 $Jue 調試當前頁面信息,實現evaluate協議執行V8加載腳本代碼。

wKgZPGfGonSAapAmAAGGDcs6-ak625.png

wKgZO2fGoniAedcjABV_vcN5Pho310.png

5. 為什么學習DevTools

?深入理解調試原理

通過學習DevTools的調試實現原理,可以更深入地理解調試工具的工作機制,從而更好地利用這些工具進行調試。

?自定義調試工具

自定義開發工具、設置斷點、單步執行、查看調用棧等。

?分析處理性能問題

分析頁面加載性能、JavaScript執行性能、內存泄漏等。

?自定義調試工具

掌握CDP協議后,可以開發自定義的調試開發工具,滿足特定需求。比如自動化測試工具、性能分析工具等。

?

希望本文能為你帶來啟發,讓你在調試的道路上越走越順!

?審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Chrome
    +關注

    關注

    0

    文章

    346

    瀏覽量

    18379
  • CDP
    CDP
    +關注

    關注

    0

    文章

    21

    瀏覽量

    10205
收藏 人收藏

    評論

    相關推薦

    如何添加自定義單板

    在開發過程中,用戶有時需要創建自定義板配置。本節將通過一個實例講解用戶如何創建屬于自己的machine,下面以g2l-test.conf為例進行說明。
    的頭像 發表于 03-12 14:43 ?380次閱讀

    Altium Designer 15.0自定義元件設計

    電子發燒友網站提供《Altium Designer 15.0自定義元件設計.pdf》資料免費下載
    發表于 01-21 15:04 ?0次下載
    Altium Designer 15.0<b class='flag-5'>自定義</b>元件設計

    think-cell:自定義think-cell(四)

    C.5 設置默認議程幻燈片布局 think-cell 議程可以在演示文稿中使用特定的自定義布局來定義議程、位置和議程幻燈片上的其他形狀,例如標題或圖片。通過將此自定義布局添加到模板,您可以為整個組織
    的頭像 發表于 01-13 10:37 ?332次閱讀
    think-cell:<b class='flag-5'>自定義</b>think-cell(四)

    think-cell;自定義think-cell(一)

    本章介紹如何自定義 think-cell,即如何更改默認顏色和其他默認屬性;這是通過 think-cell 的樣式文件完成的,這些文件將在前四個部分中進行討論。 第五部分 C.5 設置默認議程幻燈片
    的頭像 發表于 01-08 11:31 ?449次閱讀
    think-cell;<b class='flag-5'>自定義</b>think-cell(一)

    TPS659xx應用程序自定義工具

    電子發燒友網站提供《TPS659xx應用程序自定義工具.pdf》資料免費下載
    發表于 11-06 10:02 ?0次下載
    TPS659xx應用程序<b class='flag-5'>自定義工具</b>

    TCP&UDP調試工具

    TCP&UDP調試工具
    發表于 10-30 10:41 ?2次下載

    MODBUS調試工具(modscan32)

    MODBUS調試工具(modscan32)
    發表于 10-24 10:39 ?2次下載

    鴻蒙Flutter實戰:04-如何使用DevTools調試Webview

    :webview_devtools_remote_43406 # Forwardport result:OK 在 Chrome 中找打 Webview 并開始調試Chrome
    發表于 10-22 21:53

    如何將自定義邏輯FPGA/CPLD遷移到C2000?微控制器

    電子發燒友網站提供《如何將自定義邏輯FPGA/CPLD遷移到C2000?微控制器.pdf》資料免費下載
    發表于 09-23 12:36 ?0次下載
    如何將<b class='flag-5'>自定義</b>邏輯<b class='flag-5'>從</b>FPGA/CPLD遷移到C2000?微控制器

    創建自定義的基于閃存的引導加載程序(BSL)

    電子發燒友網站提供《創建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發表于 09-19 10:50 ?0次下載
    創建<b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    更強的無線(雙)串口數據記錄 調試工具

    1、介紹這是一個具備Wi-Fi功能的無線雙串口調試工具;除了基本的無線串口外還具備將串口數據自動記錄到TF卡,可自定義數據上報地址,預留可定義IO功能邏輯等功能,具有很高的可玩性;配合自研上位機
    的頭像 發表于 08-02 08:11 ?991次閱讀
    更強的無線(雙)串口數據記錄 <b class='flag-5'>調試工具</b>

    Chrome移動版支持自定義菜單欄功能

    在先前版本中,用戶通過點擊瀏覽器右上角的三個點按鈕即可調出包含各類圖標與操作的菜單。而此次更新后,Chrome新增了“自定義菜單”選項,允許用戶自主控制該區域的展示內容。
    的頭像 發表于 05-27 15:00 ?1023次閱讀

    鴻蒙原生應用元服務開發WEB-使用Devtools工具調試前端頁面

    Web組件支持使用DevTools工具調試前端頁面。DevTools是一個 Web前端開發調試工具,提供了電腦上
    發表于 05-21 15:59

    HarmonyOS開發案例:【 自定義彈窗】

    基于ArkTS的聲明式開發范式實現了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實現自定義彈窗
    的頭像 發表于 05-16 18:18 ?1671次閱讀
    HarmonyOS開發案例:【 <b class='flag-5'>自定義</b>彈窗】

    TSMaster 自定義 LIN 調度表編程指導

    LIN(LocalInterconnectNetwork)協議調度表是用于LIN總線通信中的消息調度的一種機制,我們收到越來越多來自不同用戶希望能夠通過接口實現自定義LIN調度表的需求。所以在
    的頭像 發表于 05-11 08:21 ?923次閱讀
    TSMaster <b class='flag-5'>自定義</b> LIN 調度表編程指導
    主站蜘蛛池模板: 天天干天天透 | 亚洲高清免费 | 欧美伊人久久综合网 | 特黄特色网站 | 爱爱帝国亚洲一区二区三区 | 闲人综合| 日本69xxxxxxx69 | 中文字幕在线一区二区三区 | 韩国xxxxx视频在线 | 欧美在线观看一区二区三 | 日本免费黄视频 | 在线你懂的 | 亚洲丁香网 | 狼人久久尹人香蕉尹人 | 丁香花在线影院观看在线播放 | 黄色刺激网站 | 猛操女人| 久久夜夜肉肉热热日日 | 国产黄色一级网站 | 四虎永久免费地址在线网站 | 亚洲区 欧美区 | 亚洲国产七七久久桃花 | 扛着高跟鞋丝袜腿呻吟视频 | 色妹子综合 | 美女扒开尿口给男人爽免费视频 | 永久免费视频 | 69hdxxxx日本 | 午夜性视频播放免费视频 | 亚洲一级特黄特黄的大片 | 男人和女人做a免费视频 | 国产伦精品一区二区三区 | 五月天婷婷在线播放 | 午夜免费福利在线观看 | 天天干天天澡 | 日韩午夜在线视频不卡片 | 天堂8中文在线bt | 在线观看日本免费视频大片一区 | 色多多官网 | 四虎国产在线观看 | 四虎影院国产精品 | 亚洲精品国产成人 |