精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

亚洲美女性生活| 性欧美videos| 外国电影一区二区| 中文字幕中文在线不卡住| 99re国产| 九九精品免费视频| 999视频精品| 亚洲精品一区二区三区香蕉| 蜜臀av午夜一区二区三区| 在线观看二区| 成人黄色一级视频| 国产欧美精品一区二区| 日本少妇裸体做爰| 国产精品伦理久久久久久| 亚洲精品国产精品乱码不99按摩| 亚洲成人av免费看| 爱情岛亚洲播放路线| 欧美国产欧美综合| 国产伦精品一区二区三| 中文字幕在线一| 亚洲精品资源| 欧美理论电影在线播放| www.黄色在线| 偷拍亚洲精品| 亚洲精品一区二区三区福利| 99热一区二区| 国产v综合v| 天天影视网天天综合色在线播放| 亚洲免费av网| av在线免费观看网站| 99国产精品一区| 99r国产精品视频| 中国精品一区二区| 免费视频一区| 97视频在线观看视频免费视频 | 色哟哟国产精品| 男人添女人下部视频免费| av片在线免费观看| 国产色产综合产在线视频| 精品国产电影| 成人毛片在线免费观看| 国产乱码精品1区2区3区| 国产精品专区h在线观看| 久久亚洲精品石原莉奈| 午夜亚洲视频| 欧美在线激情网| 免费日韩一级片| 影音先锋久久| 久久久亚洲天堂| 免费一级片在线观看| 亚洲影视一区二区三区| 按摩亚洲人久久| 色撸撸在线视频| 成人综合一区| 日韩中文视频免费在线观看| 婷婷丁香综合网| 91亚洲国产成人久久精品| 色偷偷偷综合中文字幕;dd| 老头老太做爰xxx视频| 精品国产一区二区三区噜噜噜| 亚洲免费视频一区二区| 无码人妻aⅴ一区二区三区69岛| 亚洲区小说区图片区qvod| 亚洲精品永久免费| 亚洲成人黄色av| 欧美好骚综合网| 欧美成年人视频网站| 国产少妇在线观看| 亚洲香蕉网站| 91av在线精品| 久操视频在线免费观看| 男人的天堂久久精品| 国产在线视频一区| 精品人妻一区二区三区蜜桃| 粉嫩aⅴ一区二区三区四区 | 人妻妺妺窝人体色www聚色窝 | 日韩在线观看一区二区| 国产狼人综合免费视频| 国产成人三级一区二区在线观看一| 国产乱子轮精品视频| 国产精品视频免费观看| 亚洲aaa在线观看| 欧美高清一级片在线观看| 手机成人av在线| av成人 com a| 欧美日韩在线电影| 熟妇无码乱子成人精品| 欧美一区自拍| www.日本久久久久com.| 久久久精品99| 日韩中文字幕亚洲一区二区va在线| 国产噜噜噜噜久久久久久久久| 性生活免费网站| 久久九九国产精品| 亚洲五码在线观看视频| gay欧美网站| 欧美精品三级在线观看| 星空大象在线观看免费播放| 91免费精品| 午夜精品久久久久久久久久久久久 | 97视频精彩视频在线观看| 亚洲人成网站影音先锋播放| 成熟丰满熟妇高潮xxxxx视频| 福利一区二区| 亚洲风情亚aⅴ在线发布| 国产又粗又猛又爽又黄的视频四季| 国产精品va| 国产精品美女久久久久久免费| 国产三级第一页| 国产日韩欧美电影| 国产黄色片免费在线观看| 精品久久久网| 精品无人区乱码1区2区3区在线| 国产午夜手机精彩视频| 丝袜美腿亚洲一区二区图片| 国产精品成人一区二区三区| aaa在线免费观看| 欧美香蕉大胸在线视频观看| 国产精品欧美性爱| 欧美丰满日韩| 国产精品国语对白| 神马午夜精品95| 亚洲人成精品久久久久| 亚洲色图久久久| 天天躁日日躁狠狠躁欧美巨大小说| 精品中文字幕在线| 一区二区日韩在线观看| 日本一二三四高清不卡| 无码精品国产一区二区三区免费| 在线播放一区二区精品视频| 精品激情国产视频| 一区二区三区精| 国产精品麻豆视频| 日韩av手机版| 国产91久久精品一区二区| 国内成人精品一区| www.色视频| 亚洲人成影院在线观看| 午夜视频在线网站| 欧美激情另类| 91免费国产视频| 日p在线观看| 欧美日本精品一区二区三区| 亚洲色图 激情小说| 久久久久久久欧美精品| 六月婷婷久久| 无遮挡在线观看| 精品小视频在线| 欧美国产成人精品一区二区三区| 99视频有精品| 欧美亚洲一二三区| 亚洲精品国产精品粉嫩| 国产成人jvid在线播放| www亚洲人| 欧美男人的天堂一二区| 国产日产精品一区二区三区的介绍| 美腿丝袜亚洲一区| 一区二区成人国产精品| 国产aⅴ精品一区二区四区| 久久亚洲国产成人| aaaa一级片| 亚洲国产一二三| 无码精品一区二区三区在线播放| av成人黄色| 欧洲高清一区二区| 精品三级在线| 欧美多人乱p欧美4p久久| 欧洲成人一区二区三区| 色悠久久久久综合欧美99| 山东少妇露脸刺激对白在线| 国产在线一区观看| av片在线免费| 免费不卡中文字幕在线| 国产精品无av码在线观看| 福利在线视频网站| 欧美哺乳videos| 国产精品suv一区| 国产精品黄色在线观看| 国产成人av片| 性色av一区二区怡红| 亚洲一区二区精品在线观看| 日韩在线观看一区二区三区| 51精品在线观看| 97超碰国产一区二区三区| 337p亚洲精品色噜噜噜| 国产主播在线播放| 亚洲国产成人在线| 少妇献身老头系列| 日韩激情视频在线观看| 9191国产视频| 精品高清久久| 91视频国产精品| 中文字幕在线视频久| 久久精品99久久久久久久久| 欧美在线精品一区二区三区| 色爱区综合激月婷婷| 五月天丁香激情| 国产目拍亚洲精品99久久精品| 久久久久无码精品| 日韩二区三区四区| av网站大全免费| 日韩免费av| 久久久久成人精品免费播放动漫| 婷婷精品久久久久久久久久不卡| 97视频在线观看亚洲| 欧洲不卡视频| 亚洲欧洲黄色网| 免费看国产片在线观看| 欧美精品久久天天躁| 久久久久久久久久久久久久av| 亚洲色图一区二区| 免费黄色片网站| 99精品热视频| 韩国黄色一级片| 精品一区二区三区的国产在线播放| 欧美国产激情视频| 国产在线成人| 中国老女人av| 色综合天天爱| 亚洲福利av在线| 久久不见久久见免费视频7| 国产精品加勒比| 成人在线啊v| 成人国产在线视频| 69堂免费精品视频在线播放| 91爱视频在线| 国产高清在线a视频大全| 操日韩av在线电影| 日本在线看片免费人成视1000| 亚洲欧美综合v| 青春草在线观看 | 欧美色综合网站| 欧美男人亚洲天堂| 黑人巨大精品欧美一区二区| 日本少妇久久久| 香蕉久久一区二区不卡无毒影院| 黄页网站免费观看| 亚洲激情在线播放| 欧美高清视频一区二区三区| 亚洲欧美国产毛片在线| 中国一级片在线观看| 国产精品成人在线观看| 91视频免费看片| 国产精品乱人伦一区二区| 亚洲一二三四视频| 国产精品少妇自拍| 成人信息集中地| 成人免费在线观看入口| 男人晚上看的视频| 亚洲色图另类专区| 青娱乐国产在线| 亚洲一区二区三区三| 日韩av在线播| 欧美视频免费在线| 精品久久久久久久久久久国产字幕| 色综合视频在线观看| 午夜精品久久久久久久蜜桃| 欧美性猛片aaaaaaa做受| 国产美女www爽爽爽| 欧美年轻男男videosbes| 国产乱码精品一区二区三区精东| 91精品国产综合久久精品| 国产www视频| 亚洲第一免费网站| 蜜桃视频在线播放| 日韩亚洲国产中文字幕| av免费网站在线观看| 久久久久久久爱| 亚洲男人av| 国产欧美精品xxxx另类| 亚洲日本va午夜在线电影| 国产精品一区二区a| 久久av免费| 五月天色婷婷综合| 一区二区亚洲| 国产精品视频分类| 国产suv精品一区二区883| 中国黄色a级片| 国产精品久久久久天堂| 国产在线免费视频| 欧美影片第一页| www.天堂在线| 亚洲人成网站999久久久综合| 日本美女高清在线观看免费| 欧美精品videosex性欧美| 日韩不卡视频在线观看| 91九色露脸| 欧美欧美黄在线二区| 性做爰过程免费播放| 性感少妇一区| 国产91在线免费观看| 欧美激情在线一区二区三区| 欧美久久久久久久久久久久| 欧美中文字幕久久| 欧美一级做性受免费大片免费| 一区二区三区视频免费| 丁香花在线电影小说观看| 国产精品久久久久久久久久| 成人免费在线电影网| 亚洲精品日韩精品| a91a精品视频在线观看| 国产性生活一级片| 国产日韩欧美在线一区| 日韩欧美性视频| 666欧美在线视频| 国产综合视频一区二区三区免费| 欧美黑人又粗大| 91精品网站在线观看| 欧美一区激情视频在线观看| 精品福利电影| 又黄又爽又色的视频| 欧美激情一区二区三区在线| 国产成人在线免费观看视频| 777午夜精品视频在线播放| 国产小视频免费在线网址| 国内精品视频一区| 国产一区二区三区国产精品| 欧美一区二区三区成人久久片| 在线成人av| avtt中文字幕| 有坂深雪av一区二区精品| 一级淫片免费看| 色妞一区二区三区| 热三久草你在线| 久草一区二区| 亚洲黄色一区| 中文字幕第3页| 亚洲一区二区精品视频| 精品人妻av一区二区三区| 免费97视频在线精品国自产拍| 男女啪啪999亚洲精品| 手机成人在线| 日韩av网站在线观看| 欧美图片第一页| 一本色道综合亚洲| 久久这里精品| 日韩美女av在线免费观看| 亚洲精品456| 麻豆av免费在线| 中文字幕精品一区二区精品绿巨人| 最新中文字幕一区| 精品一区电影国产| 都市激情亚洲综合| 欧洲精品亚洲精品| 日韩va欧美va亚洲va久久| 亚洲av无码一区二区三区人| 日韩欧亚中文在线| 国产二区在线播放| 国产精品视频播放| 99精品视频在线观看播放| 中文字幕在线视频精品| 亚洲视频网在线直播| 国产高清不卡视频| 久久久久久久成人| 色愁久久久久久| 嫩草影院国产精品| 亚洲视频免费在线| 亚洲高清视频网站| 97在线免费视频| 国产精品入口久久| 亚洲免费成人在线视频| 亚洲在线一区二区三区| 姝姝窝人体www聚色窝| 青青草成人在线| 欧美残忍xxxx极端| 激情综合激情五月| 色综合久久久久| 欧美18hd| 国产精品免费看一区二区三区| 国产欧美日韩亚洲一区二区三区| 亚洲黄色小说视频| 91精品国产综合久久久久久久久久| 亚洲区欧洲区| 久久精品日产第一区二区三区乱码| 日本成人中文字幕在线视频| 一起操在线播放| 日韩av资源在线播放| 巨胸喷奶水www久久久免费动漫| 桥本有菜av在线| 91丝袜国产在线播放| 在线观看中文字幕网站| 欧美激情精品久久久久| 国产成人精品999在线观看| 性久久久久久久久久久久久久| 精品久久久久久亚洲精品| √天堂资源地址在线官网| 国产精品国产精品| 麻豆国产一区二区| 五月天综合在线| 色综合亚洲精品激情狠狠| 好吊妞视频这里有精品 | 国产乱子伦精品视频| 久久丝袜美腿综合| 国产草草影院ccyycom| 茄子视频成人在线| 欧美私人啪啪vps| 国产欧美小视频| 日韩激情视频在线播放| 国产一区二区视频在线看| 性欧美极品xxxx欧美一区二区|