精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

調(diào)試工具的通用原理:調(diào)試四要素

開發(fā) 開發(fā)工具
我們會用 Chrome DevTools、VSCode Debugger、Vue/React DevTools 等工具來調(diào)試網(wǎng)頁、Node.js、React/Vue 的代碼,它們都屬于調(diào)試工具。調(diào)試就是通過某種信道(比如 WebSocket)把運行時信息傳遞給開發(fā)工具,做 UI 的展示和交互,輔助開發(fā)者排查問題、了解代碼運行狀態(tài)等。

作為前端開發(fā),調(diào)試是每天都會接觸的概念。你覺得什么是調(diào)試呢?

有同學(xué)說,我用 Chrome DevTools 調(diào)試網(wǎng)頁,可以查看元素,網(wǎng)絡(luò)請求,斷點運行 JS,用 Performance 工具分析性能等,這是網(wǎng)頁的調(diào)試。

有同學(xué)說,我用 VSCode Debugger 調(diào)試 Node.js,可以同時調(diào)試多個進程的代碼。這是 Node.js 的調(diào)試。

有同學(xué)說,我用 React DevTools 和 Vue DevTools 的 chrome 插件來調(diào)試 React、Vue 組件,還會用獨立的 React DevTools 調(diào)試 React Native 應(yīng)用。這是我常用的調(diào)試工具。

沒錯,這些都屬于調(diào)試。那它們有什么共同特點呢?

它們都是把運行的狀態(tài)暴露給調(diào)試工具,做一些展示和交互。

所以,我們可以給調(diào)試下個定義:

代碼在某個平臺運行,把運行時的狀態(tài)通過某種方式暴露出來,傳遞給開發(fā)工具做 UI 的展示和交互,輔助開發(fā)者排查問題、梳理流程、了解代碼運行狀態(tài)等,這個就是調(diào)試。

這里的某個平臺,可以是瀏覽器、Node.js、Electron、小程序等任何能執(zhí)行 JS 代碼的平臺。

暴露出的運行時狀態(tài),可能是調(diào)用棧、執(zhí)行上下文,或者 DOM 的結(jié)構(gòu),React 組件的狀態(tài)等。

暴露出這些數(shù)據(jù)的方式一般是通過基于 WebSocket 的調(diào)試協(xié)議,當(dāng)然也會有別的方式。

那常見的調(diào)試工具都是怎么實現(xiàn)的,有沒有什么通用的原理呢?

我們分別來看一下:

Chrome DevTools 原理

Chrome DevTools 分為兩部分,backend 和 frontend:

  • backend 和 Chrome 集成,負(fù)責(zé)把 Chrome 的網(wǎng)頁運行時狀態(tài)通過調(diào)試協(xié)議暴露出來。
  • frontend 是獨立的,負(fù)責(zé)對接調(diào)試協(xié)議,做 UI 的展示和交互。

兩者之間的調(diào)試協(xié)議叫做 Chrome DevTools Protocol,簡稱 CDP。

傳輸協(xié)議數(shù)據(jù)的方式叫做信道(message channel),有很多種,比如 Chrome DevTools 嵌入在 Chrome 里時,兩者通過全局的函數(shù)通信;當(dāng) Chrome DevTools 遠程調(diào)試某個目標(biāo)的代碼時,兩者通過 WebSocket 通信。

frontend、backend、調(diào)試協(xié)議(CDP)、信道,這是 Chrome DevTools 的 4 個組成部分。

圖片

backend 可以是 Chromium,也可以是 Node.js 或者 V8,這些 JS 的運行時都支持 Chrome DevTools Protocol。

這就是 Chrome DevTools 的調(diào)試原理。

除了 Chrome DevTools 之外,VSCode Debugger 也是常用的調(diào)試工具:

VSCode Debugger 原理

VSCode Debugger 的原理和 Chrome DevTools 差不多,也是分為 frontend、backend、調(diào)試協(xié)議這幾部分,只不過它多了一層適配器協(xié)議。

圖片

為了能直接用 Chrome DevTools 調(diào)試 Node.js 代碼,Node.js 6 以上就使用 Chrome DevTools Protocol 作為調(diào)試協(xié)議了,所以 VSCode Debugger 要調(diào)試 Node.js 也是通過這個協(xié)議。

但是中間多了一層適配器協(xié)議 Debug Adapter Protocol,這是為什么呢?

因為 VSCode 不是 JS 專用編輯器呀,它可能用來調(diào)試 Python 代碼、Rust 代碼等等,自然不能和某一種語言的調(diào)試協(xié)議深度耦合,所以多了一個適配器層。

圖片

這樣 VSCode Debugger 就可以用同一套 UI 和邏輯來調(diào)試各種語言的代碼,只要對接不同的 Debug Apapter 做協(xié)議轉(zhuǎn)換即可。

這樣還有另一個好處,就是別的編輯器也可以用這個 Debug Adapter Protocol 來實現(xiàn)調(diào)試,這樣就可以直接復(fù)用 VSCode 的各種語言的 Debug Adapter 了。

VSCode Debugger 的 UI 的部分算是 frontend,而調(diào)試的目標(biāo)語言算是 backend 部分,中間也是通過 WebSocket 傳遞調(diào)試協(xié)議。

整體和 Chrome DevTools 的調(diào)試原理差不多,只不過為了支持 frontend 的跨語言復(fù)用,多了一層適配器層。

除了 Chrome DevTools 和 VSCode Debugger 外,平時我們開發(fā) Vue 或 React 應(yīng)用,還會用 Vue DevTools 和 React DevTools:

Vue/React DevTools

Vue DevTools 或者 React DevTools 都是以 Chrome 插件(Chrome Extension)的形式存在的,要搞懂它們的原理就得了解 Chrome 插件的機制。

Chrome 插件中可以訪問網(wǎng)頁的 DOM 的部分叫做 Content Script,隨頁面啟動而生效,可以寫一些操作 DOM 的邏輯。還有一部分是后臺運行的,叫做 Background,瀏覽器啟動就生效了,生命周期比較長,可以做一些常駐的邏輯。

圖片

如果是擴展 DevTools 的 Chrome 插件,那還有一部分 DevTools Page,是在 DevTools 里顯示的頁面:

圖片

Content Script 部分可以操作 DOM,可以監(jiān)聽 DOM Event。

Backgroud 部分可以訪問 extension api,可以和 Content Script 還有 DevTools Page 通信。

DevTools Page 部分可以訪問 devtools api,可以向當(dāng)前 window 注入 JS 執(zhí)行。

這就是 Chrome 插件的大概架構(gòu)。

Vue DevTools 和 React DevTools 就是基于這個架構(gòu)來實現(xiàn)的調(diào)試功能。

你看 Vue DevTools 的源碼目錄會發(fā)現(xiàn),它也是分為 backend 和 frontend 的

圖片

那 backend 運行在哪,frontend 運行在哪,兩者怎么通信呢?

DevTools Page 是可以在頁面 eval JS 的,那就可以注入 backend 的代碼。

backend 的代碼可以拿到 Vue 組件的信息,通過 window message 的方式傳遞給 BackGround。

BackGround 可以和 DevTools Page 通信,從而實現(xiàn)消息轉(zhuǎn)發(fā)。

DevTools Page 根據(jù)拿到的數(shù)據(jù),渲染組件的信息,實現(xiàn)交互功能。

圖片

圖片

React DevTools 也是類似的,都是通過 backend 拿到組件信息,然后傳遞給 DevTools Page 做渲染和交互。

圖片

不過 React DevTools 還有獨立的 Electron 應(yīng)用,可以用于 React Native 的調(diào)試。

圖片

這種自定義調(diào)試工具也是用的 Chrome DevTools Protocol 協(xié)議么?

明顯不是,CDP 協(xié)議用來調(diào)試 DOM、JS 等挺不錯的,但是不好擴展,如果有別的需求,一般都是自定義調(diào)試協(xié)議。

過了一遍 Chrome DevTools、VSCode Debugger、Vue/React DevTools 的原理,有沒有發(fā)現(xiàn)它們有一些相同的地方?

沒錯,都有 backend 部分負(fù)責(zé)拿到運行時的信息,有 frontend 部分負(fù)責(zé)渲染和交互,也有調(diào)試協(xié)議用來規(guī)定不同數(shù)據(jù)的格式,還有不同的信道,比如 WebSocket 、Chrome 插件的 background 轉(zhuǎn)發(fā)等。

frontend、backend、調(diào)試協(xié)議、信道,這是調(diào)試工具的四要素。

不過,不同的調(diào)試工具都會有不同的設(shè)計,比如 VSCode Debugger 為了跨語言復(fù)用,多了一層 Debugger Adapter,React DevTools 有獨立的 electron 應(yīng)用,用自定義調(diào)試協(xié)議,可以調(diào)試 React Native 代碼。

總結(jié)

我們會用 Chrome DevTools、VSCode Debugger、Vue/React DevTools 等工具來調(diào)試網(wǎng)頁、Node.js、React/Vue 的代碼,它們都屬于調(diào)試工具。

調(diào)試就是通過某種信道(比如 WebSocket)把運行時信息傳遞給開發(fā)工具,做 UI 的展示和交互,輔助開發(fā)者排查問題、了解代碼運行狀態(tài)等。

我們簡單過了一遍這些調(diào)試工具的原理:

它們有通用的部分,都有 frontend、backend、調(diào)試協(xié)議、信道這四要素。

也有不同的部分,比如 VSCode Debugger 多了一層 Debugger Adapter,用于跨語言的復(fù)用,Vue/React DevTools 通過向頁面注入 backend 代碼,然后通過 Background 實現(xiàn)雙向通信等。

抓住它們相同的部分來分析,理解不同的部分的設(shè)計原因,就很容易搞懂各種調(diào)試工具的原理了。

責(zé)任編輯:武曉燕 來源: 神光的編程秘籍
相關(guān)推薦

2024-07-09 08:31:26

2024-01-24 13:22:40

Python調(diào)試工具技巧

2016-12-02 20:23:51

AndroidADB

2012-02-24 09:25:20

JavaScript

2011-08-15 17:38:48

iPhone開發(fā)調(diào)試工具

2023-03-29 08:18:16

Go調(diào)試工具

2022-08-21 14:05:54

調(diào)試工具CDP

2024-02-23 10:00:27

Linux工具

2018-11-27 11:35:32

systemtapMySQL調(diào)試工具

2020-05-21 15:53:59

遠程調(diào)試工具

2025-03-03 00:00:00

Chrome工具前端

2025-03-31 03:25:00

2025-02-19 08:25:23

2025-07-03 02:00:00

2025-07-28 02:44:00

串口調(diào)試工具

2021-07-28 11:46:51

工具gRPC客戶端

2017-08-23 09:26:16

Chromelive 狀態(tài)代碼

2022-07-25 07:57:19

工具代碼調(diào)試

2015-04-22 12:10:28

在線編譯調(diào)試工具

2020-02-25 14:38:05

代碼開發(fā)工具
點贊
收藏

51CTO技術(shù)棧公眾號

国语对白做受69| 欧美日韩亚洲综合一区二区三区| 99久久久精品免费观看国产| 国产一级二级三级视频| 超碰成人在线观看| 五月婷婷色综合| 精品免费一区二区三区蜜桃| 国产一级免费视频| 日韩一区二区在线| 日韩欧美国产一二三区| 国产在线播放观看| 国产在线小视频| 久久精品国产网站| 国内精品400部情侣激情| 草草影院第一页| 精品三级在线| 亚洲成人7777| 日韩一区二区电影在线观看| 国产三级漂亮女教师| 在线中文一区| 日韩精品高清在线观看| 91热这里只有精品| 青青在线视频| 91丨九色丨尤物| 成人www视频在线观看| 国产小视频在线看| 成人一区二区| 亚洲电影成人av99爱色| jizzjizzxxxx| 91极品在线| 久久久亚洲精品一区二区三区| 国产日产欧美精品| 久久久久99精品成人片试看| 综合亚洲自拍| 日韩美女在线视频| 国产淫片免费看| 成人video亚洲精品| 久久久综合激的五月天| 国产精品网站入口| 国产日产精品一区二区三区| 久久久久久影院| 亚洲视频在线观看| 欧美黄色免费网站| 国产mv免费观看入口亚洲| 狂野欧美性猛交| 欧美成人基地| 91精品国产综合久久久久久久| 青青草原成人网| 手机av免费在线| 中文字幕精品三区| 六月婷婷久久| 婷婷婷国产在线视频| 高清免费成人av| 成人久久久久久久| 这里只有久久精品视频| 亚洲永久免费| 97国产真实伦对白精彩视频8| 久草手机视频在线观看| 成人精品影院| 亚洲色图在线观看| 亚洲图片综合网| 中文字幕亚洲在线观看| 制服丝袜av成人在线看| 国产福利在线免费| 欧美啪啪网站| 欧美日韩一级视频| 在线免费av播放| 456成人影院在线观看| 一区二区三区成人| 伊人网在线免费| huan性巨大欧美| 一区二区三区色| 无码人妻精品一区二区蜜桃网站| 在线欧美三级| 一区二区三区四区国产精品| 996这里只有精品| 免费网站在线观看人| 一区二区三区四区视频精品免费| 亚洲人成影视在线观看| a√资源在线| 国产精品久久久久桃色tv| 一区二区免费电影| 女女色综合影院| 一区二区三区在线观看国产| 国产性生活免费视频| 黄色免费在线看| 亚洲女子a中天字幕| 大胆欧美熟妇xx| 春色校园综合激情亚洲| 欧美日韩在线视频一区| 日批视频在线免费看| 天然素人一区二区视频| 欧美美女喷水视频| 日韩欧美国产片| 高清欧美日韩| 欧美刺激午夜性久久久久久久| 精品国产一二区| 亚洲精品456| 色爱av美腿丝袜综合粉嫩av | 性欧美又大又长又硬| 色激情天天射综合网| jizzzz日本| 77成人影视| 亚洲精品自拍偷拍| 午夜一区二区三区免费| 日韩欧美一区二区三区在线视频| 久久av.com| 国产精品999在线观看| 麻豆视频观看网址久久| 99国产视频在线| 水莓100国产免费av在线播放| 久久久国产一区二区三区四区小说 | 女女同性女同一区二区三区按摩| heyzo中文字幕在线| 91高清视频在线| 亚洲欧洲日韩综合| 国产欧美高清视频在线| 色综合91久久精品中文字幕| 亚洲黄网在线观看| 国产高清精品网站| 日本一区二区三不卡| 黄色网页在线免费看| 日韩欧美极品在线观看| 天堂av手机在线| 中文字幕亚洲在线观看| 亚洲激情视频在线播放| 国产三级精品三级观看| 国产日韩欧美一区| 亚洲一区二区三区久久| 国产51人人成人人人人爽色哟哟| 亚洲综合激情网| 天堂av在线8| 国产一区二区三区91| 欧美精品激情blacked18| 国产永久免费视频| 久久久久久日产精品| 欧美亚洲黄色片| 伊人久久大香伊蕉在人线观看热v| 日韩av一区在线| 91视频免费看片| 六月天综合网| 黄色国产精品一区二区三区| 在线观看av黄网站永久| 色综合久久99| 漂亮人妻被黑人久久精品| 婷婷成人基地| 国产精品人成电影| 九色蝌蚪在线| 天天av天天翘天天综合网色鬼国产| 日韩av加勒比| 欧洲杯什么时候开赛| 欧美在线视频播放| 人妻91麻豆一区二区三区| 亚洲综合一区二区| 国产精品人人爽人人爽| 少妇精品久久久| 97精品视频在线观看| 天堂av手机版| 一区二区三区四区在线免费观看 | 精品捆绑美女sm三区| 日韩欧美国产成人精品免费| 久久一本综合频道| 久久国产精品亚洲va麻豆| 看黄在线观看| 日韩av在线一区二区| 日本天堂在线视频| 成人深夜在线观看| 欧美精品久久久久久久自慰| 国产精品videossex| 欧美大片免费观看| 亚洲欧美强伦一区二区| 亚洲成人动漫av| 欧美精品黑人猛交高潮| 久久av一区| 色姑娘综合av| 色成人综合网| 久久国产精品亚洲| 国产一区二区三区中文字幕 | 国产精品 欧美激情| 狠狠狠色丁香婷婷综合久久五月| 99热这里只有精品7| 免费一区二区三区在线视频| 欧美激情视频在线| 天堂av2024| 91国产免费看| 一级性生活免费视频| 国产精品中文字幕一区二区三区| 成人在线视频一区二区三区| 日本欧美高清| 国产成人精彩在线视频九色| 成av人电影在线观看| 欧美挠脚心视频网站| 欧美精品成人久久| 91碰在线视频| 超碰成人在线播放| 国产一区欧美| 免费看成人午夜电影| 国产资源一区| 欧美黑人性视频| 免费在线观看一级毛片| 91精品国产aⅴ一区二区| 日韩三级小视频| 亚洲国产高清aⅴ视频| www.涩涩涩| 欧美特黄视频| 欧美国产一区二区在线| 青青草国产一区二区三区| 欧美第一黄色网| 亚洲国产精品suv| 欧美性极品xxxx做受| 国产精品久久久免费看| 国产校园另类小说区| www.555国产精品免费| 加勒比av一区二区| 成人精品视频一区二区| 国产一区视频在线观看免费| 国产免费色视频| 精品成人影院| 久久久影院一区二区三区 | 精品国产乱码久久久久久久久| 中文字幕自拍偷拍| 一本一本久久a久久精品综合麻豆| 欧美精品一级片| 亚洲人成电影网站色mp4| 国产精品美女高潮无套| 91日韩精品一区| a天堂视频在线观看| 国产99久久久国产精品| 久久成年人网站| 麻豆国产91在线播放| 91淫黄看大片| 日韩电影免费一区| 美女福利视频在线| 国产一级久久| 一区二区传媒有限公司| 亚洲三级视频| 国产人妻777人伦精品hd| 国产精品mm| 欧美亚洲色图视频| 在线成人超碰| 精品久久久无码人妻字幂| 中文字幕人成人乱码| 国产成人精品免费看在线播放| 第一sis亚洲原创| 亚洲欧美日韩精品久久久| 色琪琪久久se色| 中文字幕一区二区三区精彩视频| 91视频综合| 最新不卡av| 欧美精品aa| 狠狠精品干练久久久无码中文字幕| 天天精品视频| 国产激情片在线观看| 欧美日韩综合| 精品久久一二三| 久久国产精品久久w女人spa| 国产黄色特级片| 日本不卡的三区四区五区| 天天爽夜夜爽一区二区三区| 久久精品av麻豆的观看方式| 在线能看的av网站| 国产成人免费av在线| 稀缺小u女呦精品呦| 久久青草欧美一区二区三区| 国产不卡在线观看视频| 亚洲品质自拍视频网站| 久久久久久久久久久久国产| 午夜视频一区在线观看| 精人妻无码一区二区三区| 欧美日韩免费不卡视频一区二区三区 | 欧美xxx黑人xxx水蜜桃| 97在线观看视频国产| 蜜臀国产一区| 91亚洲人电影| 青青一区二区| 亚洲在线不卡| 亚洲视频综合| 毛片av免费在线观看| 国产一区二区三区高清播放| 国产视频精品视频| 国产日韩欧美精品综合| 国产成人av免费在线观看| 精品欧美激情精品一区| 夜夜躁日日躁狠狠久久av| 日韩一级免费观看| 久草福利在线视频| 欧美日韩高清在线观看| 极品美女一区| 99久久99久久精品国产片| 亚洲另类av| 中国女人做爰视频| 日韩国产欧美在线播放| 麻豆av免费看| 中文字幕巨乱亚洲| 日韩精品视频免费播放| 欧美精品一级二级| 无码h黄肉3d动漫在线观看| 精品国产欧美一区二区五十路| av成人福利| 91精品免费视频| 一区二区小说| 福利视频免费在线观看| 免费观看30秒视频久久| 白嫩情侣偷拍呻吟刺激| 国产精品久久久久久亚洲伦| 色播视频在线播放| 日韩一二三区视频| 国产精品一区二区三区四区色 | 福利一区二区免费视频| 精品国产日本| 欧美日本不卡| 色呦色呦色精品| 国产欧美一区二区精品婷婷 | 日本精品600av| 国产免费一区视频观看免费| 玖玖玖免费嫩草在线影院一区| 黑人巨大国产9丨视频| 日韩电影在线一区二区| 毛茸茸多毛bbb毛多视频| 亚洲一区二区三区影院| 国产日韩一级片| 俺去亚洲欧洲欧美日韩| 成人黄色免费短视频| 久久99精品久久久久久久久久| 国语自产精品视频在线看8查询8| 国内国产精品天干天干| 中文字幕不卡在线观看| 日本天堂网在线| 亚洲精品国产综合久久| 国产羞羞视频在线播放| 国产a一区二区| 欧美精选一区| 无码人妻久久一区二区三区蜜桃| 亚洲另类在线制服丝袜| 国产情侣激情自拍| 欧美精品少妇videofree| 台湾天天综合人成在线| 在线视频一区观看| 久久国产三级精品| 欧美h片在线观看| 4438x成人网最大色成网站| 男人影院在线观看| 91精品视频在线| 欧美1区2区| 亚洲国产精品第一页| 亚洲va国产va欧美va观看| 色婷婷综合视频| 欧美一级视频在线观看| 亚欧日韩另类中文欧美| 精品视频无码一区二区三区| 久久品道一品道久久精品| 色老头一区二区| 中文字幕日韩精品有码视频| 欧美网站免费| 美女黄色片网站| 成人av电影免费在线播放| 日韩精品一区二区av| 亚洲欧美中文在线视频| 日本一区二区三区视频在线| 在线视频不卡一区二区三区| 国产精品一卡二| 欧美三日本三级少妇99| 亚洲欧洲一区二区三区在线观看| 欧美日韩国产网站| 五月天综合婷婷| 国产91精品在线观看| 国产成人愉拍精品久久 | 1区2区3区在线视频| 国产成人亚洲欧美| 鲁大师成人一区二区三区| 美国美女黄色片| 日韩免费视频一区| 神马午夜在线视频| 亚洲精品国产系列| 国产99久久久国产精品潘金网站| 91精品国产综合久久久蜜臀九色| 在线观看视频亚洲| 日韩中文字幕| 国产极品美女高潮无套久久久| 国产精品九色蝌蚪自拍| 成人黄色免费视频| 国产精品白嫩美女在线观看| 久久久人成影片免费观看| 亚洲国产精品无码久久久久高潮| 欧洲激情一区二区| 麻豆福利在线观看| 日韩jizzz| 高清国产一区二区| 国产精品高清无码| 国内精品久久影院| 日本欧美视频| a天堂视频在线观看| 欧美剧情片在线观看| 夜鲁夜鲁夜鲁视频在线播放| 一级做a爰片久久| 久久影视一区二区| www.麻豆av| 国产精品亚洲一区二区三区| 日韩一级大片| 1024手机在线视频|