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

Node.js 調試一路走來經歷了什么

開發 前端
今天我們用 Chrome Devtools 或者 VSCode Debugger 都可以輕松調試 Node.js 代碼,其實這背后還是有一段挺有意思的故事的。

做為前端開發,想必大家都寫過 Node.js 的代碼,也大概率用 debugger 斷點調試過。

我們可以用 Chrome Devtools 調試 Node.js 代碼,也可以用 VSCode 來調試它。調試工具是 Node.js 開發的基礎工具了。

但現在好用的調試工具也不是一開始就這樣的,它經歷了一系列的演變過程。今天我們就來聊聊 Node.js 調試工具背后的故事吧。

相信還是有部分同學不知道 Node.js 代碼怎么調試的,所以我們先來過一遍怎么調試 Node.js 代碼:

調試 Node.js 代碼

準備一段簡單的 Node.js 代碼用來調試:

const os = require('os');
function func(a, b) {
return a + b;
}
console.log(func(1,2));
console.log(os.cpus());

它的邏輯就是執行了一個加法,然后打印了 cpu 的核心的情況。

直接執行是這樣的:

打印了 1 + 2 的結果,也就是 3 ,也打印了 CPU 核心的情況,8 核的 M1 芯片。

那怎么斷點調試呢?

執行的時候加上一個 --inspect 的參數,就會啟動調試服務了:

指定 --inspect-brk 參數還會在首行斷住。

可以看到啟動了一個 WebSocket 的服務端,這就是調試服務,用某個調試工具客戶端連上就行了:

調試客戶端可以是 Chrome Devtools 也可以是 VSCode。

Chrome Devtools

比如用 Chrome Devtools 來連上是這樣的:

打開 chrome://inspect 的 url 就會看到這個可以連接的 target:

點擊 inspect 就是連上這個 ws 服務端來做調試:

右邊可以看到調用棧、上下文的變量,可以單步執行、可以打斷點等。

打印信息會輸出在 console:

VSCode

用 VSCode 調試的話需要在項目根目錄下加一個 .vscode/launch.json 的文件,類型選擇 attach to process:

很容易理解,就是連接到目標進程的 ws 服務的意思:

端口是 9229,也就是我們調試服務啟動的端口。

然后點擊調試面板的調試按鈕來啟動:

這樣也會在斷點處斷住,可以單步運行、可以看調用棧、上下文的信息:

看到這里不知道有沒有同學會覺得這樣太麻煩了,每次都要起一個 ws 調試服務,然后再 attach,不能把這兩步合并到一塊自動給做了嗎?

沒錯,確實可以合并到一塊,也就是起一個 ws 服務,然后自動 attach 上:

調試配置選擇 launch program:

只需要指定要調試的 Node.js 模塊的地址,然后點擊啟動,這樣就可以調試了:

注意,想達到和 --inspect-brk 一樣的首行斷住的效果,這里要執行 stopOnEntry 為 true。

效果是一樣的:

這樣比直接啟動 ws 調試服務,然后再 attach 還少了一步。

怎么調試 Node.js 講完了,大家是不是覺得這樣調試還是蠻方便的呢?

但其實最開始的調試并沒有這么好用,接下來我們看下之前的調試都是咋樣的吧:

Node.js Debugger 的歷史

從前面的實踐中我們也能發現,調試的原理還是蠻清晰的:

啟動一個 WebSocket 服務端來提供各種運行時的信息,這個服務是 JS Runtime 提供的,也就是 Node。

啟動一個 WebSocket 客戶端來實現調試的 UI,包括調用棧、上下文的顯示、打斷點、單步運行等功能,比如我們用過的 Chrome Devtools、VSCode Debugger。

中間傳輸的消息就是調試協議:

我們知道 Node.js 是基于 V8 的,V8 本身有調試協議 V8 Debug Protocol,所以 Node.js 最早的調試協議也就是 V8 Debug Protocol。

當時調試是這樣的:

通過 node debug 來跑 js 文件,會在首行斷住:

然后可以通過 run、cont、next、step 等命令來實現單步調試,通過 backtrace 打印調用棧,通過 setBreakPoint 等設置斷點:

比如用 setBreakPoint(sb)命令在第四行打個斷點:

然后 cont(c) 命令繼續執行,backtrace(bt) 打印調用棧:

雖然該有的調試功能都有,但是這樣調試還是比較費勁的。

怎么能不用命令行調試,而是用 UI 來調試呢?

當時 Node 就瞄準了 Chrome Devtools,它的調試 UI 就很不錯。

但是 Chrome Devtools 的調試協議是 Chrome Devtools Protocol,和 V8 Debug Protocol 還是有些差距的,怎么能用上 Chrome Devtools 的調試工具來調試 Node 呢?

其實還挺容易想到的,就是加一個中間的服務來做轉換:

這個服務是 node-inspector 這個包提供的。

所以當時 node debug 服務跑起來之后,還要要再跑一個 node-inspector 服務,這樣才能用 chrome devtools 來調試 Node.js 代碼。

后來維護 Node.js 的那些人覺得這樣也太麻煩了,要不讓 Node.js 提供的調試協議就直接就是兼容 Chrome Devtools Protocol 的吧。

當時就有了這樣一個 pr,把 v8 inspector 集成到 Node.js 中:

這個 v8 inspector 就是從 chrome 的內核 blink 里剝離出來的讓 v8 支持 chrome devtools protocol 的部分。

很明顯這需要 v8 團隊的配合,所以說 Node.js 的發展還是很依賴 v8 團隊的支持的。

之后 Node.js 就在 v6.3 中加入了這個功能:

并且在成熟之后去掉了對 v8 debug protocol 的支持,也就是廢棄了 node debug 命令,改為了 node inspect。

啟動 ws 服務的方式就是 node --inspect 或者 node --inspect-brk。

當然,之前作為兩個協議的中轉的服務 node-inspector 也就退出了歷史舞臺。

所以今天,我們可以輕易的用 Chrome Devtools 來調試 Node.js 代碼,就如本文開始展示的那樣。

當然,這里只是說 Chrome Devtools 調試 Node.js,在 VSCode 里調試 Node.js 的話還有另一段小故事:

調試的原理我們已經知道了,就是 ws 客戶端和服務器的通信,然后基于調試協議來完成不同的功能。Node.js 是這樣,其他語言也是這樣。

VSCode 是一個通用的編輯器,是要支持多種語言的,也就是它的調試 UI 要支持多種調試協議。

要同一個調試工具同時支持不同的協議有點不太現實,那怎么辦呢?

可以加一個中間層,VSCode 的調試 UI 只要支持這個中間的調試協議就可以了,其余的調試協議適配到這個調試協議上來:

這就是 DAP 協議,debugger adpater protocol。

Node.js 在把調試工具的協議換成兼容 Chrome Devtools Protocol 的協議之后,只要實現個 DAP 的 adapter 就可以對接到 VSCode 的調試工具了。

這樣我們就可以在 VSCode 里調試 Node.js 了。

Node.js 調試的故事講完了,我們來總結下:

總結

現在 Node.js 的調試可以用 Chrome Devtools 也可以用 VSCode,都是挺方便的。

但是它不是一開始就這么好用的,我們聊了下它之前的故事:

調試的原理就是 Node 啟動 ws 的調試服務,調試客戶端(chrome devtools、vscode 等)對接這個調試服務并實現交互的 UI,基于傳輸的調試協議來完成調試。

最開始 Node.js 的調試協議是 v8 debug protocol,只能用命令行調試。

為了直接用 Chrome Devtools 的 UI 來調試,就實現了 node-inspector 的中轉服務來實現 v8 debug protocol 到 chrome devtools protocol 的協議轉換。

這樣還是太麻煩了,所以后來 Node.js 和 v8 團隊合作實現了 v8-inspector,可以讓 Node.js 提供的調試協議是直接兼容 Chrome Devtools Protocol 的。

這樣我們就可以直接用 node --inspect 起 ws 調試服務,然后用 Chrome Devtools 連接調試了。

VSCode 為了同一個調試 UI 支持不同語言的調試,設計了中間的調試協議 Debug Apapter Protocol。Node.js 想在 VSCode 里調試的話只要實現對應的 adapter 即可。

今天我們用 Chrome Devtools 或者 VSCode Debugger 都可以輕松調試 Node.js 代碼,其實這背后還是有一段挺有意思的故事的。

責任編輯:姜華 來源: 神光的編程秘籍
相關推薦

2011-09-02 14:47:48

Node

2012-02-02 15:14:29

Node.js

2011-03-28 10:52:51

戴爾高效企業

2021-08-25 06:33:52

Node.jsVscode調試工具

2012-05-02 15:56:20

PHP

2016-02-02 17:10:46

戴爾Equal Logic

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2023-08-29 09:43:21

Node.js.env

2021-08-24 05:00:21

Nodejs線程

2019-05-27 15:30:44

Node.jsJavaScript前端

2023-01-30 22:34:44

Node.js前端

2024-11-18 08:58:26

2011-11-01 10:30:36

Node.js

2011-09-08 13:46:14

node.js

2011-09-09 14:23:13

Node.js

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2024-04-26 09:03:31

Node.jsCurrent發布版
點贊
收藏

51CTO技術棧公眾號

男女做暖暖视频| 日本手机在线视频| 国产精品爽爽久久久久久| 亚洲精品在线观看91| 日韩欧美色综合网站| 精品无码国产一区二区三区av| 视频三区在线观看| 美女任你摸久久| 欧美激情二区三区| 免费网站在线高清观看| 精品一区91| 日韩欧美一区二区三区| av不卡在线免费观看| 色哟哟中文字幕| 麻豆国产精品视频| 26uuu国产精品视频| 大吊一区二区三区| 欧美三级自拍| 欧美一区二区免费| 免费看黄色一级大片| 少妇视频在线| 国产精品久久久久婷婷| 久久精品国产综合精品| 国产免费不卡av| 美女诱惑黄网站一区| 成人97在线观看视频| 先锋影音av在线| 日韩成人午夜| 精品国产免费一区二区三区四区| 中文久久久久久| 亚洲精品动漫| 香蕉影视欧美成人| 天天干天天色天天爽| 国产精品四虎| 97精品久久久午夜一区二区三区| aa成人免费视频| 91尤物国产福利在线观看| 久久精品伊人| 777午夜精品福利在线观看| 天堂网avav| 久久亚洲专区| 色系列之999| 非洲一级黄色片| 亚洲丝袜啪啪| 日韩精品极品毛片系列视频| 国产人成视频在线观看| 日韩一区二区三区精品视频第3页| 欧美日韩一本到| 99视频在线视频| 亚洲四虎影院| 欧美在线不卡视频| 日韩手机在线观看视频| 欧洲av不卡| 色噜噜狠狠成人中文综合| 女人和拘做爰正片视频| 在线观看v片| 欧美性xxxx极品高清hd直播| 久久久久久久久久久视频| 国产三级电影在线播放| 午夜激情久久久| 国产h视频在线播放| 国产拍在线视频| 色悠悠久久综合| 手机看片福利盒子久久| av免费在线一区| 欧美视频第二页| 一区二区三区视频观看| 亚洲色图av在线| 亚洲精品一二三四五区| 电影亚洲精品噜噜在线观看| 在线亚洲一区二区| 爱爱爱爱免费视频| 国产日本亚洲| 欧美mv和日韩mv的网站| 国产精品久久久久久久久久久不卡| 自拍偷拍亚洲色图欧美| 黄视频网站在线| 亚洲婷婷综合色高清在线| 最新av在线免费观看| 国产在线观看a视频| 亚洲美女屁股眼交| 五月丁香综合缴情六月小说| 色戒汤唯在线观看| 在线免费观看黄色| 视频一区视频二区在线观看| 国产成人激情视频| 88av在线视频| 国产.精品.日韩.另类.中文.在线.播放| 国产91精品在线播放| 中文字幕理论片| 国内精品免费**视频| 狠狠久久亚洲欧美专区| 欧美视频久久| 亚洲黄色免费网站| 成人在线视频一区二区三区| 波多野结衣在线播放| 欧美日韩中文字幕综合视频| 777视频在线| 91在线一区| 成人羞羞在线观看网站| 亚洲欧美日韩专区| 91成人在线视频| 亚洲天堂久久久久| av高清久久久| 自拍另类欧美| 女厕盗摄一区二区三区| 欧美三级三级三级| 特种兵之深入敌后| 免费看成人哺乳视频网站| www.国产精品一二区| 国产精品第一页在线观看| 日韩精品乱码免费| 国产精品一区二区免费看| 日本三级在线视频| 欧美日韩视频在线| 杨幂一区二区国产精品| 国产精品一国产精品| 欧美成人精品一区二区| 福利网址在线观看| 成人高清伦理免费影院在线观看| 伊人久久青草| 全亚洲第一av番号网站| 亚洲成人黄色网| 成人免费毛片东京热| 免费在线观看成人| 欧美少妇一区| 色吧亚洲日本| 亚洲精品成人网| 国产十六处破外女视频| 蜜臀av性久久久久蜜臀aⅴ| 国产自产在线视频一区| 色呦呦在线观看视频| 欧美美女一区二区三区| 国产精成人品免费观看| 亚洲综合国产| 国产日韩一区二区| 日本欧美电影在线观看| 欧美一级午夜免费电影| 亚洲少妇xxx| 老司机免费视频一区二区| 日产精品高清视频免费| 欧美xx视频| 亚洲欧美日韩久久久久久| 国产在线精品观看| 成人动漫一区二区在线| 性欧美大战久久久久久久| 久久国际精品| 欧美精品中文字幕一区| 一本色道久久综合精品婷婷| 国产精品无人区| 国产成人黄色网址| 99视频精品全部免费在线视频| 国产精品视频永久免费播放| av在线二区| 精品视频999| 日本成人精品视频| 精品一区在线看| 四虎免费在线观看视频| 日韩一区二区三区精品| 欧美极品少妇全裸体| 日本免费网站在线观看| 欧美日韩国产精品| 公侵犯人妻一区二区三区| 天堂一区二区在线| 亚洲国产精品一区二区第一页| 91亚洲精品| 久久天天躁夜夜躁狠狠躁2022| 国产强伦人妻毛片| 亚洲一区免费在线观看| 国产a级黄色片| 久久国产高清| 亚洲国产一区二区精品视频 | 久久精品精品电影网| 91精品国产乱码久久久久| 国产精品久久久久久久久果冻传媒| 中文字幕 欧美日韩| 欧美色图麻豆| 久久人人九九| 国产福利91精品一区二区| 久久影院在线观看| 全部免费毛片在线播放一个| 色综合色狠狠综合色| 日本成人免费在线观看| 东方aⅴ免费观看久久av| 国产成人a亚洲精v品无码| 久久影院100000精品| 97国产超碰| 日日夜夜天天综合| 九九热视频这里只有精品| 日韩精品系列| 日韩一级片网址| 国产 日韩 欧美 在线| 国产精品国产三级国产专播品爱网| 性色av浪潮av| 久久精品男女| 日本天堂免费a| 国产一区网站| 国产一区二区三区av在线| yy6080久久伦理一区二区| 欧美极品少妇xxxxⅹ裸体艺术 | 欧美成人免费全部| 天天摸天天碰天天爽天天弄| 精品视频免费看| 在线观看免费国产视频| 自拍偷拍欧美精品| 少妇真人直播免费视频| 国产成人av自拍| 污版视频在线观看| 久久xxxx| 久久99久久久久久| 午夜精品久久久久久久四虎美女版| 国产在线精品一区二区三区| 999精品视频在线观看| 欧美亚洲一区在线| 欧美亚洲系列| 久久久极品av| www.国产精品.com| 亚洲人在线视频| 污污网站在线免费观看| 欧美tk—视频vk| 国产精品一二三四五区| 欧美亚洲综合网| 国产乱国产乱老熟| 亚洲电影激情视频网站| 99热精品免费| 亚洲伦在线观看| 日韩av片在线免费观看| 亚洲国产成人午夜在线一区| 欧美性xxxx图片| 91视视频在线观看入口直接观看www| 欧美日韩一区二区区别是什么| 老司机精品视频在线| 三级a在线观看| 天堂影院一区二区| 热久久精品免费视频| 午夜在线视频一区二区区别| 黄色一级视频片| 日韩五码在线| 日日碰狠狠添天天爽超碰97| 亚洲免费精品| 内射国产内射夫妻免费频道| 99精品国产在热久久下载| 成人网站免费观看入口| 亚洲国产婷婷| 六月丁香激情网| 免费在线观看成人av| wwwxxx黄色片| 日韩精品一级中文字幕精品视频免费观看 | 天堂在线观看免费视频| 精品sm捆绑视频| 人妻夜夜爽天天爽| 亚洲精品www| 色吊丝在线永久观看最新版本| 亚洲国产天堂久久综合| 污污网站在线免费观看| 亚洲欧美中文日韩v在线观看| 韩国中文字幕2020精品| 在线成人一区二区| 免费在线观看黄色网| 久久国产精品久久久| 午夜成年人在线免费视频| 欧美精品videos| 天堂网在线最新版www中文网| 欧美专区在线观看| 日韩制服诱惑| 亚洲一区亚洲二区| 久久97久久97精品免视看秋霞| 欧美国产综合视频| 97精品97| 97干在线视频| 久久综合亚州| 午夜天堂在线视频| 成人动漫视频在线| 天天干天天舔天天操| 亚洲人成影院在线观看| 久久久久久久99| 91成人在线精品| 国产特级aaaaaa大片| 亚洲国产欧美在线成人app| 欧美人体大胆444www| www.亚洲人.com| 人妻一区二区三区| 亚洲福利合集| 欧美激情免费在线| 日本黄色免费在线| 国产精品日韩电影| jizz18欧美18| 精品国产91亚洲一区二区三区www| 老汉色老汉首页av亚洲| 四虎永久在线精品免费一区二区| 亚洲国产日韩欧美在线| 乱人伦xxxx国语对白| 老司机精品视频在线| 欧洲午夜精品久久久| 国产一区 在线播放| 欧美久久久网站| 不卡视频一区二区三区| 色综合综合色| 可以免费看的黄色网址| 国产一区二区三区成人欧美日韩在线观看| 黄色一级二级三级| 高清国产一区二区| 亚洲午夜精品久久久久久高潮| 亚洲综合在线观看视频| 在线视频观看一区二区| 国产精品美女毛片真酒店| 亚洲免费婷婷| 国产福利精品一区二区三区| youjizz国产精品| 激情五月激情综合| 精品久久久久久中文字幕大豆网| 怡红院男人的天堂| 日韩电影中文字幕一区| v天堂福利视频在线观看| 日本久久91av| 中文字幕日韩高清在线| 四虎永久国产精品| 在线一区欧美| 国产成人精品综合久久久久99| 国产欧美日韩精品在线| 国产黄色片视频| 欧美一区二区三区成人| 成a人v在线播放| 在线观看91视频| 国产日韩亚洲精品| 欧美一区二区激情视频| 亚洲少妇30p| 亚洲精品国产欧美在线观看| 亚洲精品久久久久国产| 2024最新电影在线免费观看| 国产精品入口福利| 国产免费播放一区二区| 免费看一级大黄情大片| 高清在线不卡av| 国产极品国产极品| 亚洲国产一区二区精品专区| 在线观看免费高清视频97| 免费大片黄在线| 秋霞午夜一区二区| 久久99偷拍| 国产乱淫av片杨贵妃| 国产高清不卡一区二区| 我要看一级黄色录像| 欧美酷刑日本凌虐凌虐| 在线国产情侣| 国产欧美一区二区三区在线看| 国内精品视频在线观看| 久久人妻精品白浆国产| 不卡一本毛片| 五月天欧美精品| 国产精品嫩草影院精东| 少妇高潮久久77777| 韩国精品视频在线观看 | 午夜精品久久久久久久91蜜桃| 综合国产在线视频| 日日狠狠久久| 免费看污污视频| 从欧美一区二区三区| 日韩xxx高潮hd| 网曝91综合精品门事件在线| 日韩高清专区| 免费xxxx性欧美18vr| www.黄色com| 日韩一卡二卡三卡国产欧美| 国产精品免费无遮挡| 中国成人一区| 91成人在线视频观看| 国产精品66部| 国产精品美女毛片真酒店| 亚洲精品短视频| 制服诱惑亚洲| 99re99热| 国产不卡高清在线观看视频| 日韩av在线天堂| 一区二区三区精品99久久 | jizz中国女人| 啊v视频在线一区二区三区| 国产美女精品视频免费播放软件| 免费网站在线观看视频| 久久美女高清视频| 97国产精品久久久| 久久久久九九九九| 精品一区亚洲| 香蕉视频xxx| 欧美日韩一区免费| 欧美激情二区| 久久精品女人的天堂av| 日韩成人免费电影| 欧美日韩中文不卡| **欧美日韩在线观看| 欧美美女18p| 精品国产影院| 丰满少妇在线观看| 亚洲国产视频a| аⅴ资源新版在线天堂| 51精品国产人成在线观看| 久久不射中文字幕| 青青草在线观看视频| 亚洲人成在线电影| 2021年精品国产福利在线|