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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

揭秘Chrome DevTools:從原理到自定義調(diào)試工具

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2025-03-04 14:49 ? 次閱讀

引言

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

wKgZPGfGolKAd2yrAAGrSZIO2dM672.png

Android WebView Devtools adb調(diào)試過(guò)程

1. DevTools的組成與原理

1.1 DevTools組成部分

Chrome DevTools主要由以下幾個(gè)部分組成:

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

?Backend 后端服務(wù):與瀏覽器內(nèi)核通信(如Chromium、V8等),執(zhí)行調(diào)試命令, 通過(guò)CDP與前端界面交互。

?CDP(Chrome DevTools Protocol):Chrome調(diào)試工具協(xié)議(JSON 格式的數(shù)據(jù)封裝協(xié)議)。

wKgZO2fGolSAVMKYAAEBbMJliGE634.png

1.2 工作原理

DevTools 的核心是基于 Chrome DevTools Protocol (CDP), 工作原理可以簡(jiǎn)單概括為:前端界面通過(guò)CDP協(xié)議與瀏覽器內(nèi)核通信,發(fā)送調(diào)試命令并接收調(diào)試信息。瀏覽器內(nèi)核根據(jù)接收到的命令執(zhí)行相應(yīng)的操作,并將結(jié)果返回給前端界面。

2. CDP協(xié)議詳解

2.1 什么是CDP協(xié)議?

CDP(Chrome DevTools Protocol)是Chrome DevTools與瀏覽器內(nèi)核通信的協(xié)議。它基于WebSocket,允許開(kāi)發(fā)者通過(guò)發(fā)送JSON格式的命令來(lái)控制瀏覽器行為,并獲取調(diào)試信息。 通過(guò) CDP,DevTools 能夠?qū)崟r(shí)與頁(yè)面交互,實(shí)現(xiàn)斷點(diǎn)調(diào)試、性能分析等功能。

2.2 CDP協(xié)議的核心特點(diǎn)

?基于JSON-RPC:CDP協(xié)議使用JSON格式傳輸數(shù)據(jù),簡(jiǎn)單易讀。

?雙向通信:不僅調(diào)試器可以發(fā)送命令,瀏覽器也會(huì)主動(dòng)推送事件(比如斷點(diǎn)觸發(fā)、網(wǎng)絡(luò)請(qǐng)求完成)。

?模塊化設(shè)計(jì):CDP協(xié)議分為多個(gè)模塊(如DOM、Network、Runtime等),每個(gè)模塊負(fù)責(zé)不同的功能。

2.3 CDP協(xié)議的主要功能

?DOM操作和CSS:獲取、修改DOM結(jié)構(gòu)和CSS樣式。

?網(wǎng)絡(luò)監(jiān)控:監(jiān)控網(wǎng)絡(luò)請(qǐng)求和響應(yīng)。

?JavaScript調(diào)試:設(shè)置斷點(diǎn)、單步執(zhí)行、查看調(diào)用棧等。

?性能分析:分析頁(yè)面加載性能、JavaScript執(zhí)行性能等。

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

2.4 CDP協(xié)議的工作流程

1.建立WebSocket連接:通過(guò)WebSocket與瀏覽器內(nèi)核建立連接。

2.發(fā)送協(xié)議命令:前端界面發(fā)送JSON格式的命令。

3.執(zhí)行協(xié)議命令:瀏覽器內(nèi)核執(zhí)行命令并返回結(jié)果。

4.接收結(jié)果:前端界面接收并顯示結(jié)果。

3. 了解CDP傳輸協(xié)議信息

3.1 啟動(dòng)工具

啟用協(xié)議日志,DevTools的設(shè)置中勾選“rotocol Montor

wKgZPGfGolWAHHGMAADg4FljUZw787.png

wKgZPGfGoliAW46nAAWdkAdKRM8809.png

刷新頁(yè)面打開(kāi)協(xié)議工具

wKgZO2fGoluAIIAFAAoRuQZImb4081.png

查看協(xié)議的主要內(nèi)容,此時(shí)此刻就可以看到協(xié)議交互為JSON格式

wKgZO2fGol6ASF2OAAvrXSKS_68173.png

3.2 分析CDP內(nèi)容

當(dāng)我們點(diǎn)擊代碼左邊設(shè)置斷點(diǎn)后,可以看到前端(Devtools面板)請(qǐng)求內(nèi)容:

wKgZPGfGomCALBOuAAHC63kyhOM063.png

以及后端返回結(jié)果:

wKgZO2fGomKAX4J9AAL4yE59CxQ481.png

4. 自定義調(diào)試工具

4.1 為何需要自定義調(diào)試工具?

1. DevTools 的局限性

?針對(duì)網(wǎng)頁(yè)設(shè)計(jì):DevTools 是為網(wǎng)頁(yè)開(kāi)發(fā)設(shè)計(jì)的,其功能(如 DOM 檢查、CSS 調(diào)試、網(wǎng)絡(luò)請(qǐng)求分析等)主要圍繞 HTML、CSS 和 JavaScript 展開(kāi)。對(duì)于非網(wǎng)頁(yè)應(yīng)用(如自定義語(yǔ)言、桌面應(yīng)用、嵌入式系統(tǒng)等),這些功能可能不適用。

?無(wú)法直接調(diào)試非網(wǎng)頁(yè)應(yīng)用:DevTools 依賴于瀏覽器的運(yùn)行時(shí)環(huán)境(如 V8 引擎)和 Chrome DevTools Protocol (CDP)。如果應(yīng)用不是運(yùn)行在瀏覽器中,或者使用了非 JavaScript 語(yǔ)言,DevTools 無(wú)法直接調(diào)試,比如 Roma 安卓和鴻蒙端在采用的App內(nèi)嵌入V8引擎,因此無(wú)法直接調(diào)試。

2. 自定義調(diào)試工具的需求

?支持自定義語(yǔ)言或框架:如果應(yīng)用使用了自定義 DSL(領(lǐng)域特定語(yǔ)言)或其他編程語(yǔ)言(如 PythonC++ 等),需要開(kāi)發(fā)專門(mén)的調(diào)試工具來(lái)支持這些語(yǔ)言的語(yǔ)法、運(yùn)行時(shí)和調(diào)試功能。

?特定領(lǐng)域的調(diào)試需求:某些應(yīng)用場(chǎng)景(如物聯(lián)網(wǎng)設(shè)備調(diào)試、定制與自身業(yè)務(wù)結(jié)合的開(kāi)發(fā)調(diào)試工具等)可能需要特定的調(diào)試功能,而這些功能在 DevTools 中并不存在。

?跨平臺(tái)支持:可以為不同平臺(tái)(例如 Roma AndroidiOSHarmony)開(kāi)發(fā)統(tǒng)一的調(diào)試工具。

4.2 其中的技術(shù)挑戰(zhàn)

除了CDP協(xié)議外還需要實(shí)現(xiàn):

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

?運(yùn)行時(shí)環(huán)境集成:對(duì)于非 JavaScript 語(yǔ)言,需要將調(diào)試模塊集成到運(yùn)行時(shí)環(huán)境中(如 V8 引擎、Python 解釋器等),以支持?jǐn)帱c(diǎn)、單步執(zhí)行、變量檢查等功能。

4.3 手搓自定義調(diào)試

基于CDP, 實(shí)現(xiàn)自定義調(diào)試工具:

wKgZPGfGomSAW9aBAApph27FdtI935.png

1. 建立 WebSocket 通信層: 與DevTools調(diào)試面板建立通信。

wKgZO2fGomaAXXqrAATPBZObN-A542.png

2. 完成瀏覽器Discovery協(xié)議:在瀏覽器中可以顯示應(yīng)用。

wKgZPGfGomiAAbFzAAMzeRrB8FU539.png

wKgZO2fGomyAFtD-AAO6CQLUDUQ706.png

3. 完善/轉(zhuǎn)發(fā)CDP協(xié)議:

V8中已自帶了inspector能力,對(duì)于代碼的調(diào)試協(xié)議大多不需要我們處理,對(duì)于inspector外的協(xié)議需要單獨(dú)處理,例如 Console、Page等。 其他語(yǔ)言庫(kù)如未實(shí)現(xiàn)inspector,需要單獨(dú)實(shí)現(xiàn)inspector部分,例如 QuickJS。

wKgZPGfGom-AZSJBAA9EYrn9z5I508.png

4. 處理/轉(zhuǎn)發(fā)CDP協(xié)議:例如獲取 設(shè)置斷點(diǎn)、取消斷點(diǎn)、發(fā)起網(wǎng)絡(luò)請(qǐng)求。

實(shí)現(xiàn)每一個(gè)CDP協(xié)議消息的發(fā)送與相應(yīng),例如 setBreakpointByUrl 協(xié)議完成 接收DevTools設(shè)置斷點(diǎn)到V8中。

wKgZO2fGonOAMLizABUNQ5qrqzg523.png

5. Devtools進(jìn)行擴(kuò)展:

基于CDP 定制自己的頁(yè)面 或 自定義協(xié)議命令,比如Roma Android調(diào)試中可以輸入 $Jue 調(diào)試當(dāng)前頁(yè)面信息,實(shí)現(xiàn)evaluate協(xié)議執(zhí)行V8加載腳本代碼。

wKgZPGfGonSAapAmAAGGDcs6-ak625.png

wKgZO2fGoniAedcjABV_vcN5Pho310.png

5. 為什么學(xué)習(xí)DevTools

?深入理解調(diào)試原理

通過(guò)學(xué)習(xí)DevTools的調(diào)試實(shí)現(xiàn)原理,可以更深入地理解調(diào)試工具的工作機(jī)制,從而更好地利用這些工具進(jìn)行調(diào)試。

?自定義調(diào)試工具

自定義開(kāi)發(fā)工具、設(shè)置斷點(diǎn)、單步執(zhí)行、查看調(diào)用棧等。

?分析處理性能問(wèn)題

分析頁(yè)面加載性能、JavaScript執(zhí)行性能、內(nèi)存泄漏等。

?自定義調(diào)試工具

掌握CDP協(xié)議后,可以開(kāi)發(fā)自定義的調(diào)試開(kāi)發(fā)工具,滿足特定需求。比如自動(dòng)化測(cè)試工具、性能分析工具等。

?

希望本文能為你帶來(lái)啟發(fā),讓你在調(diào)試的道路上越走越順!

?審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Chrome
    +關(guān)注

    關(guān)注

    0

    文章

    346

    瀏覽量

    18490
  • CDP
    CDP
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    10247
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    KiCad 中的自定義規(guī)則(KiCon 演講)

    “ ?Seth Hillbrand 在 KiCon US 2025 上為大家介紹了 KiCad 的規(guī)則系統(tǒng),并詳細(xì)講解了自定義規(guī)則的設(shè)計(jì)與實(shí)例。? ” ? 演講主要圍繞 加強(qiáng) KiCad 中的自定義
    的頭像 發(fā)表于 06-16 11:17 ?153次閱讀
    KiCad 中的<b class='flag-5'>自定義</b>規(guī)則(KiCon 演講)

    HarmonyOS應(yīng)用自定義鍵盤(pán)解決方案

    自定義鍵盤(pán)是一種替換系統(tǒng)默認(rèn)鍵盤(pán)的解決方案,可實(shí)現(xiàn)鍵盤(pán)個(gè)性化交互。允許用戶結(jié)合業(yè)務(wù)需求與操作習(xí)慣,對(duì)按鍵布局進(jìn)行可視化重構(gòu)、設(shè)置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護(hù)層面,自定義鍵盤(pán)可以
    的頭像 發(fā)表于 06-05 14:19 ?487次閱讀

    如何添加自定義單板

    在開(kāi)發(fā)過(guò)程中,用戶有時(shí)需要?jiǎng)?chuàng)建自定義板配置。本節(jié)將通過(guò)一個(gè)實(shí)例講解用戶如何創(chuàng)建屬于自己的machine,下面以g2l-test.conf為例進(jìn)行說(shuō)明。
    的頭像 發(fā)表于 03-12 14:43 ?528次閱讀

    如何快速創(chuàng)建用戶自定義Board和App工程

    概述自HPM_SDKv1.7.0發(fā)布開(kāi)始,在HPM_ENV中新增了user_template文件夾,以方便用戶快速創(chuàng)建自定義的Board和App工程。user_template是用戶模板工程,用戶
    的頭像 發(fā)表于 02-08 13:38 ?452次閱讀
    如何快速創(chuàng)建用戶<b class='flag-5'>自定義</b>Board和App工程

    Altium Designer 15.0自定義元件設(shè)計(jì)

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

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

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

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

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

    TPS659xx應(yīng)用程序自定義工具

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

    TCP&UDP調(diào)試工具

    TCP&UDP調(diào)試工具
    發(fā)表于 10-30 10:41 ?3次下載

    MODBUS調(diào)試工具(modscan32)

    MODBUS調(diào)試工具(modscan32)
    發(fā)表于 10-24 10:39 ?3次下載

    鴻蒙Flutter實(shí)戰(zhàn):04-如何使用DevTools調(diào)試Webview

    :webview_devtools_remote_43406 # Forwardport result:OK 在 Chrome 中找打 Webview 并開(kāi)始調(diào)試Chrome
    發(fā)表于 10-22 21:53

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

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

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

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

    更強(qiáng)的無(wú)線(雙)串口數(shù)據(jù)記錄 調(diào)試工具

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

    NVIDIA NeMo加速并簡(jiǎn)化自定義模型開(kāi)發(fā)

    如果企業(yè)希望充分發(fā)揮出 AI 的力量,就需要根據(jù)其行業(yè)需求量身定制的自定義模型。
    的頭像 發(fā)表于 07-26 11:17 ?1182次閱讀
    NVIDIA NeMo加速并簡(jiǎn)化<b class='flag-5'>自定義</b>模型開(kāi)發(fā)
    主站蜘蛛池模板: 四虎永久在线精品影院 | 四虎新地址4hu 你懂的 | 黄色在线网站视频 | 日韩种子 | 国产精品国产三级在线高清观看 | 最新国产精品视频免费看 | 就去干综合| 久久久午夜毛片免费 | 成人欧美一区二区三区的电影 | 一区二区在线观看高清 | 好爽好黄的视频 | 国产精品久久新婚兰兰 | 俺来色 | 特黄特黄视频 | 青青草国产三级精品三级 | 天天爱夜夜爽 | 成人青草亚洲国产 | 美女骚网站| 免费看片免 | 在线成人精品国产区免费 | 天天天天天天天操 | 久久夜色精品国产尤物 | 国产乱码1卡一卡二卡 | 色老头网址 | 色婷婷一区二区三区四区成人 | 国产一区二区在线观看免费 | 色五五月五月开 | 日日干干夜夜 | 中国成人免费视频 | 国产98在线传媒在线视频 | 成人人免费夜夜视频观看 | 亚洲五月激情 | 精品久久香蕉国产线看观看亚洲 | 国产成视频| 国产成人永久在线播放 | 97视频hd| 爽好舒服快受不了了老师 | 手机在线观看你懂得 | 国产又色又爽又黄的网站在线一级 | 奇米影视777狠狠狠888不卡 | 国产精品久久久久久久免费 |