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

讓你 Nodejs 水平暴增的 Debugger 技巧

開發(fā) 前端
我覺得學(xué)習(xí) nodejs 除了要掌握基礎(chǔ)的 api、常用的一些包外,最重要的能力是學(xué)會(huì)使用 debugger。因?yàn)楫?dāng)流程復(fù)雜的時(shí)候,斷點(diǎn)調(diào)試能夠幫你更好的理清邏輯,有 bug 的時(shí)候也能更快的定位問題。

 [[409644]]

本文轉(zhuǎn)載自微信公眾號(hào)「神光的編程秘籍」,作者神說要有光zxg。轉(zhuǎn)載本文請聯(lián)系神光的編程秘籍公眾號(hào)。

學(xué)習(xí) nodejs 最重要的是什么?可能每個(gè)人都有自己的答案。

我覺得學(xué)習(xí) nodejs 除了要掌握基礎(chǔ)的 api、常用的一些包外,最重要的能力是學(xué)會(huì)使用 debugger。因?yàn)楫?dāng)流程復(fù)雜的時(shí)候,斷點(diǎn)調(diào)試能夠幫你更好的理清邏輯,有 bug 的時(shí)候也能更快的定位問題。

狼叔說過,是否會(huì)使用 debugger 是區(qū)分一個(gè)程序員 nodejs 水平的重要標(biāo)志。

本文分享一下 debugger 的原理和 vscode debugger 的使用技巧。

debugger 原理

運(yùn)行 nodejs 代碼的時(shí)候,如果帶上了 --inspect(可以打斷點(diǎn)) 或者 --inspect-brk(可以打斷點(diǎn),并在首行斷住) 的參數(shù),那么就會(huì)以 debugger 的模式啟動(dòng):

可以看到,node 啟動(dòng)了一個(gè) web socket 的 server,地址是:ws://127.0.0.1:9229/78637688-e8e0-4582-80cc-47655f4bff66

為什么 debugger 要啟動(dòng)一個(gè) websocket server 呢?

debugger 的含義就是要在某個(gè)地方斷住,可以單步運(yùn)行、查看環(huán)境中的變量。那么怎么設(shè)置斷點(diǎn)、怎么把當(dāng)前上下文的變量暴露出去呢,就是通過啟動(dòng)一個(gè) websocket server,這時(shí)候只要啟動(dòng)一個(gè) websocket client 連接上這個(gè) server 就可以調(diào)試 nodejs 代碼了。

v8 debug protocol

連上之后呢,debugger server 和 debugger client 怎么交流?這就涉及到了 v8 debug protocol。

通過兩邊都能識(shí)別的格式來交流,比如:

在 test.js 的 100 行 設(shè)置斷點(diǎn):

  1.     "seq":118, 
  2.     "type":"request"
  3.     "command":"setbreakpoint"
  4.     "arguments":{ 
  5.         "type":"script"
  6.         "target":"test.js"
  7.         "line":100 
  8.     } 

然后查看當(dāng)前作用域的變量:

  1.     "seq":117, 
  2.     "type":"request"
  3.     "command":"scope" 

執(zhí)行一個(gè)表達(dá)式:

  1.     "seq":118, 
  2.     "type":"request"
  3.     "command":"evaluate"
  4.     "arguments":{ 
  5.         "expression":"a()" 
  6.     } 

之后繼續(xù)運(yùn)行:

  1.     "seq":117, 
  2.     "type":"request"
  3.     "command":"continue" 

通過這種方式,client 就可以告訴 debugger server 如何執(zhí)行代碼。

debugger client

debugger client 一般都是有 ui 的(當(dāng)然,在命令行里面通過命令來調(diào)試也可以,但一般不這么做)。常見的 js 的 debugger client 有 chrome devtools 和 vscode debugger 等。

我們寫一個(gè)簡單的 js 腳本,通過 node --inspect-brk 跑起來:

可以看到它啟動(dòng)在了 9229 端口,

然后,我們分別通過兩種 client 連上它。

chrome devtools

在 chrome 地址欄輸入 chrome://inspect,然后點(diǎn)擊 configure 來配置目標(biāo)端口:

把剛才的端口 9229 填上去:

然后就可以看到 chrome 掃描到了這個(gè) target,點(diǎn)擊 inspect 就可以連上這個(gè) debugger server。

之后就可以設(shè)置斷點(diǎn)、單步執(zhí)行、執(zhí)行表達(dá)式、查看作用域變量等,這些功能都是通過 v8 debug protocol 來實(shí)現(xiàn)的。

vscode debugger

在 vscode 里面寫代碼,在 chrome devtools 里調(diào)試比較麻煩,vscode 也實(shí)現(xiàn)了 debugger 的支持,可以直接用 vscode 來調(diào)試。

使用vscode 調(diào)試能力的方式是修改項(xiàng)目根目錄下的 .vscode/launch.json 配置。

attach

點(diǎn)擊右下角的按鈕來添加一個(gè)配置項(xiàng)。這里選擇 nodejs 的 attach:

因?yàn)橐呀?jīng)通過 node --inspect-brk 啟動(dòng)了 websocket 的 debugger server,那么只需要啟動(dòng) websocket client,然后 attach 上 9229 端口就行。

點(diǎn)擊左側(cè)的按鈕,就可以連上 debugger server 開始調(diào)試:

launch

這樣先通過 node --inspect-brk 啟動(dòng) debugger server,然后再添加 vscode debug 配置來連接上太麻煩了,能不能把這兩步合并呢?

當(dāng)然可以,只要添加一個(gè) launch 的配置:

這里的 type 是 launch,就是啟動(dòng) debgger server 并且啟動(dòng)一個(gè) debugger client 連接上該 server。運(yùn)行的程序是根目錄下的 index2.js,還可以設(shè)置 stopOnEntry 來在首行斷住。

點(diǎn)擊調(diào)試,就可以看到能夠成功的調(diào)試該 js 文件。

vscode 會(huì)啟動(dòng) debugger server,然后啟動(dòng) debugger client 自動(dòng)連接上該 server,這些都不需要我們?nèi)リP(guān)心。

這樣我們就可以成功的使用 vscode debugger 來調(diào)試 nodejs 代碼。

vscode debugger 進(jìn)階

debugger client 中我們最常用的還是 vscode,這里著重講一下 vscode debugger 的各種場景下的配置。

sourcemap

如果調(diào)試 ts 代碼,肯定不能調(diào)試編譯后的代碼,要能夠映射回源碼,這個(gè)是 sourcemap 做的事情。調(diào)試工具都支持 sourcemap,比如 chrome devtools 和 vscode debugger,都支持文件末尾的 sourcemap url 的解析:

//# sourceMappingURL=index.js.map

這樣當(dāng)調(diào)試 index.js的時(shí)候,如果它是 ts 編譯的出來的,就會(huì)自動(dòng)找到對(duì)應(yīng)的 ts。

當(dāng)然,如果調(diào)試配置里面直接指定了 ts,那么要能夠調(diào)試需要再配置 outFiles,告訴 vscode 去哪里找 sourcemap。

這樣,在 ts 源碼中打的斷點(diǎn)和在編譯出的 js 打的斷點(diǎn)都能生效。

多進(jìn)程調(diào)試

當(dāng)代碼中有子進(jìn)程的時(shí)候,就有了第二條控制流,需要再啟動(dòng)一個(gè) debugger。

比如 vscode,它是基于 electron,需要啟動(dòng)一個(gè)主進(jìn)程,一些渲染進(jìn)程。主進(jìn)程是通過 launch 啟動(dòng)的,而渲染進(jìn)程則是后來 attach 的。

主進(jìn)程啟動(dòng)的時(shí)候,通過 --remote-debugging-port 來指定子進(jìn)程自動(dòng)的時(shí)候的 debugger server 的端口。

outFiles 來指定 sourcemap 的位置,這樣才可以直接調(diào)試 ts 源碼。runtimeExecutable 是用 vscode 的運(yùn)行時(shí)替代掉了 nodejs(一般不需要設(shè)置)。

然后渲染進(jìn)程是后面啟動(dòng)的,我們通過參數(shù)配置了會(huì)啟動(dòng)在 9222 端口,那么只要 attach 到那個(gè)端口就可以調(diào)試該進(jìn)程了。

vscode 支持多 target 調(diào)試,也就是可以在 vscode 里面同時(shí)啟動(dòng) 多個(gè) debugger??梢郧袚Q不同的 debugger 來調(diào)試不同的進(jìn)程。

總結(jié)

debugger 的使用是一項(xiàng)很重要的能力,對(duì)于 nodejs 水平的提升很有幫助。

nodejs debugger 的原理是 js 引擎會(huì)啟動(dòng) debugger server(websocket),等待客戶端連接,我們可以通過各種 debugger client 連上來進(jìn)行調(diào)試,比如 chrome devtools、vscode debugger。

調(diào)試 nodejs 代碼更多還是使用 vscode debugger(當(dāng)然有的時(shí)候也會(huì)使用 chrome devtools 調(diào)試,基于 chrome devtools 的 memory 來進(jìn)行內(nèi)存分析,定位內(nèi)存泄漏問題的時(shí)候很有幫助)。

vscode debugger 的使用主要是在 .vscode/launch.json 里面添加調(diào)試配置。

調(diào)試配置分為 launch 和 attach 兩種:

  • launch 會(huì)啟動(dòng) debugger server 并用 debugger client 連接上
  • attach 只是啟動(dòng) debugger client 連接上已有的 debugger server,所以要指定端口

具體的配置項(xiàng)常用的有:

  • outFiles 指定 sourcemap 的位置,用來調(diào)試 ts 源碼等需要編譯的代碼
  • stopOnEntry 在首行停住
  • args 來指定一些命令行參數(shù)
  • runtimeExecutable 當(dāng)運(yùn)行時(shí)不是 nodejs 的時(shí)候需要指定,比如 vscode 或者其他的一些運(yùn)行時(shí)

基于這些配置我們就可以調(diào)試各種場景下的 nodejs 代碼,需要編譯的,或者多個(gè)進(jìn)程的。

不夸張地說,如果你熟悉了 debugger 的使用,理解各種 nodejs 代碼都會(huì)簡單很多。希望這篇文章能夠幫助大家了解 debugger 的原理,并且能夠使用 chrome devtools 或者 vscode debugger 來調(diào)試 nodejs 代碼。知道有 sourcemap 以及多進(jìn)程的情況下都怎么調(diào)試。

 

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

2021-12-25 22:29:31

類型編程Javascript類型體操

2024-07-22 00:00:00

2023-03-27 14:33:50

ChatGPT

2020-05-07 17:03:49

Python編碼開發(fā)

2025-03-27 03:40:00

分布式系統(tǒng)Kafka

2020-12-04 10:45:18

辦公軟件插件工具

2021-07-19 22:51:28

Python開發(fā)編程

2023-11-28 10:17:37

2015-10-30 10:33:02

溝通程序員事業(yè)發(fā)展

2025-02-28 14:00:00

結(jié)構(gòu)體C#.NET 9

2017-05-18 09:16:54

前端CSS技巧

2011-03-02 14:15:06

Pureftpd

2021-08-17 10:08:44

HTML網(wǎng)站網(wǎng)絡(luò)

2020-11-29 17:32:01

EmacsLinux

2021-03-04 09:25:08

Go語言惡意軟件黑客

2025-02-24 08:24:25

2025-01-13 02:00:00

模型訓(xùn)練數(shù)據(jù)

2019-11-25 10:20:54

CSS代碼javascript

2025-09-03 09:02:00

2025-06-16 08:00:00

點(diǎn)贊
收藏

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

欧美日韩国产精选| 韩国v欧美v日本v亚洲v| 亚洲精品456在线播放狼人| 少妇人妻在线视频| 国产三区四区在线观看| 久久99精品视频| 国产69精品久久久| 亚洲午夜久久久久久久国产| 国产激情一区| 黑丝美女久久久| 一区二区三区四区不卡| 殴美一级特黄aaaaaa| 日本免费在线视频不卡一不卡二| 久热精品视频在线免费观看| 国产黄色网址在线观看| 国产精品一区二区三区av| 一区二区三区在线观看动漫| 欧美日韩一区二区视频在线观看| 99久久亚洲精品日本无码| 亚洲影院在线| 久久99精品国产99久久6尤物| 无码熟妇人妻av| 一区二区在线视频观看| 在线免费不卡视频| 成人性生活视频免费看| 成人影院www在线观看| 久久久亚洲欧洲日产国码αv| 亚洲xxx视频| 中文字幕一区二区人妻| 一本色道久久综合| 欧美激情第99页| 一本在线免费视频| 九九久久成人| 亚洲激情在线观看| 国产伦理在线观看| 五月天色综合| 欧美亚洲精品一区| 午夜视频在线瓜伦| 亚洲性色av| 欧美日韩色婷婷| 一卡二卡三卡视频| 欧美xxxx免费虐| 亚洲免费视频中文字幕| 自拍偷拍一区二区三区| 超碰免费97在线观看| 久久一夜天堂av一区二区三区| 国产精品久久国产精品| 动漫av一区二区三区| 国产一区在线视频| 亚洲aa中文字幕| 国产精品久久久久久久久毛片 | 精品日韩免费| 亚洲精品一区av在线播放| 星空大象在线观看免费播放| jazzjazz国产精品麻豆| 精品久久人人做人人爽| 国产性猛交96| 精品国产一区二区三区成人影院| 欧美精品一区在线观看| 白嫩情侣偷拍呻吟刺激| 高清精品视频| 国产婷婷色综合av蜜臀av| 中文字幕丰满乱子伦无码专区| 综合亚洲色图| 在线观看精品国产视频| 午夜黄色福利视频| 女同性一区二区三区人了人一| 色综合久久中文字幕综合网小说| 免费人成年激情视频在线观看| 国内自拍一区| 97超碰蝌蚪网人人做人人爽| 久久免费激情视频| 肉肉av福利一精品导航| 国产日本欧美在线观看| 亚洲第一天堂网| 91麻豆高清视频| 亚洲欧洲一区二区| 99在线视频观看| 亚洲444eee在线观看| 无码人妻丰满熟妇区毛片18| 日本综合字幕| 日韩一区二区三区在线视频| 国产麻豆剧传媒精品国产av| 精品国产不卡| 美日韩在线视频| wwwxxx亚洲| 久久99精品国产91久久来源| 91网免费观看| 黄色片免费在线| 一区二区三区丝袜| 男人天堂网视频| 国产aⅴ精品一区二区四区| 亚洲成人精品久久久| 国产精成人品免费观看| 午夜精品亚洲| 国产精国产精品| 国产成人久久精品77777综合| 91亚洲国产成人精品一区二区三 | 亚洲91中文字幕无线码三区| 国内精品视频久久| 中文字幕在线网站| av在线播放一区二区三区| 图片区小说区区亚洲五月| 日韩av毛片| 欧美日韩在线不卡| aaaaa一级片| 国产一在线精品一区在线观看| 欧美一级黄色网| a网站在线观看| 欧美国产日韩在线观看| 久久久久久久久久久99| 国产剧情一区二区在线观看| 亚洲三级免费看| 国产污视频在线看| 极品美女销魂一区二区三区 | 欧美精品一卡| 国产欧美日韩中文| 日本成人一区| 亚洲二区在线观看| 色男人天堂av| 秋霞欧美视频| 国产精品 欧美在线| 天堂在线观看免费视频| 一区二区三区久久久| 亚洲欧美视频二区| 国产欧美一区二区精品久久久| 欧美麻豆久久久久久中文| 亚洲综合视频在线播放| 久久久久久久国产精品影院| 国产真实老熟女无套内射| 国产精品美女久久久久| 丝袜亚洲欧美日韩综合| 亚洲婷婷久久综合| 久久精品亚洲精品国产欧美 | 女生影院久久| 日韩成人av在线| 日韩av在线播| 成人av电影免费在线播放| h无码动漫在线观看| 日本一区二区三区电影免费观看| 色99之美女主播在线视频| 成人黄色片在线观看| 国产欧美一区二区精品性色超碰| 久久9精品区-无套内射无码| 日日狠狠久久偷偷综合色| 午夜精品久久久99热福利| 亚洲精品久久久久久动漫器材一区 | 天堂а√在线中文在线鲁大师| 日韩国产成人精品| 日本在线免费观看一区| 亚洲一区二区三区四区| 国产亚洲精品成人av久久ww| 亚洲大片免费观看| 欧美高清在线一区二区| 91福利国产成人精品播放| 日韩大片在线播放| 成人欧美一区二区三区黑人孕妇| 国产在线观看av| 日韩色在线观看| 国产一级一级片| 94色蜜桃网一区二区三区| 女人和拘做爰正片视频| 国产成人精品三级高清久久91| 国产精品精品久久久| 成人午夜影视| 91精品在线免费观看| 劲爆欧美第一页| av在线不卡观看免费观看| 精品久久久久av| 97视频精品| 成人欧美一区二区三区在线观看| av资源网在线播放| 宅男66日本亚洲欧美视频| 国产一区二区三区黄片| 一区二区三区四区高清精品免费观看| 亚洲av永久无码精品| 久久久亚洲人| 一本二本三本亚洲码| 一区二区中文字幕在线观看| 欧美在线不卡区| 欧美日韩视频在线播放| 精品乱人伦一区二区三区| 久久久久99精品成人片我成大片| 国产精品三级电影| 无码任你躁久久久久久老妇| 日韩经典中文字幕一区| 永久免费网站视频在线观看| 欧美日韩看看2015永久免费| 国产精品网站大全| 阿v视频在线| 最近中文字幕日韩精品| 黄色片一区二区三区| 欧洲一区二区三区免费视频| 青青草成人免费| 国产三级欧美三级| 日本人妻一区二区三区| 快she精品国产999| 日本久久久网站| 欧美伦理影院| 国产日韩欧美精品| 成人国产精品久久| 日本国产高清不卡| 色呦呦在线看| 色悠悠久久久久| 你懂的视频在线| 日韩欧美自拍偷拍| 中国黄色一级视频| 精品电影在线观看| 国产乱国产乱老熟300| 久久久久久久久久久久久女国产乱| 色婷婷综合在线观看| 日韩高清电影一区| 日本www在线播放| 亚洲九九视频| 亚洲国产欧美日韩| 曰本一区二区三区视频| 国产精品v欧美精品v日韩| 亚洲一区二区av| 国产成人+综合亚洲+天堂| 成全电影大全在线观看| 两个人的视频www国产精品| 国产高清自拍视频在线观看| 亚洲精品国产欧美| 懂色av一区二区三区四区| 在线播放91灌醉迷j高跟美女| 日韩在线播放中文字幕| 午夜影视日本亚洲欧洲精品| 久久精品一级片| 一区二区三区中文字幕精品精品 | 激情五月***国产精品| 欧美日韩一级在线| 久久国产亚洲| 亚洲精品中文字幕在线| 精品亚洲成人| 欧美日韩亚洲一区二区三区在线观看| 日韩欧美黄色| 久久精品综合一区| 日韩激情网站| 久久久久久一区| 亚洲福利天堂| 欧美成ee人免费视频| 日韩美女精品| 免费一区二区三区在在线视频| 欧美激情网址| 九九99玖玖| 亚洲区小说区| 日本一区二区三区四区高清视频| 色天下一区二区三区| 久久精精品视频| 久久成人高清| 视频一区不卡| 国产最新精品| 亚洲免费久久| 亚洲天天影视网| 久久久久久久香蕉| 亚洲区欧美区| 任你操这里只有精品| 日韩精品高清不卡| 亚洲欧美国产中文| 麻豆精品蜜桃视频网站| 免费在线观看污网站| 国产一区二区在线免费观看| 一级片黄色免费| 成人免费精品视频| 性欧美13一14内谢| 中文字幕一区二区三区精华液| 久久精品亚洲a| 亚洲第一福利一区| 6080午夜伦理| 欧美日韩国产成人在线91| 国产女18毛片多18精品| 亚洲黄页视频免费观看| 成年人在线观看网站| 久久成人18免费网站| 国产社区精品视频| 国产精品对白刺激| 欧美久久一区二区三区| 精品人伦一区二区三区| 日韩欧美高清在线播放| 成人av在线播放观看| 激情综合在线| 另类小说第一页| 国产成人精品亚洲日本在线桃色 | 欧美限制电影| 久久久久久久久久久综合| 六月丁香综合| 欧美成人手机在线视频| av中文字幕在线不卡| 啪啪一区二区三区| 五月婷婷色综合| 中文字幕永久在线观看| 欧美成人福利视频| www.av在线播放| 久久久久久久久亚洲| 精品三区视频| 国产伦精品一区二区三区| 日本午夜一区| www.爱色av.com| 国产一区二区伦理| 69视频在线观看免费| 一区二区三区久久| 97国产精品久久久| 亚洲欧美日韩精品久久亚洲区| www.在线视频| 国产精品久久久久久久久久久久久| 日韩最新av| 午夜午夜精品一区二区三区文| 亚洲每日在线| 手机看片国产精品| 国产精品国产精品国产专区不片 | av影片在线| 成人激情黄色网| 成人一区不卡| 乱子伦视频在线看| 91影院在线观看| 日本免费在线播放| 日韩欧美久久久| 久热国产在线| 国产精品视频99| 少妇精品久久久一区二区| 黄色www网站| 成人免费观看av| 欧美精品xxxxx| 欧美一区二区三区播放老司机| h网站在线免费观看| 国产成人欧美在线观看| 西野翔中文久久精品字幕| 免费看国产一级片| 成人激情免费网站| 国产精品成人网站| 亚洲精品一区在线观看| www红色一片_亚洲成a人片在线观看_| 国产精品久久久久久久久免费| 欧美男同视频网| av免费在线播放网站| 久久久久国产精品麻豆ai换脸 | 欧洲性视频在线播放| 92国产精品视频| 欧美黄色aaaa| 亚洲成人福利视频| 亚洲成人av福利| 亚洲av成人无码网天堂| 欧美在线视频一二三| 外国成人在线视频| 精品视频免费在线播放| 91在线视频18| 国产农村妇女aaaaa视频| 亚洲码在线观看| av在线日韩| 一本一本a久久| 激情综合网av| 久久97人妻无码一区二区三区| 欧美一二三区在线| 国产天堂在线播放视频| 精品国产乱码久久久久| 国产亚洲激情| 久久久久久国产免费a片| 欧美图片一区二区三区| 免费a级在线播放| 69堂成人精品视频免费| 亚洲国产一区二区三区高清| 国产在线观看无码免费视频| 欧美性xxxx在线播放| aaa在线观看| 99电影在线观看| 亚洲永久视频| 精品少妇一区二区三区密爱| 日韩一级片网址| 亚洲同志男男gay1069网站| 日韩欧美精品在线不卡| 国产又黄又大久久| 黄色激情视频在线观看| 亚洲天堂av在线免费| 日韩国产一二三区| 久操网在线观看| 国产人妖乱国产精品人妖| 精品国产亚洲av麻豆| 国产91成人video| 图片小说视频色综合| 又黄又爽的网站| 欧美系列日韩一区| 亚洲奶水xxxx哺乳期| 欧美精品久久久| 国产一区三区三区| 黄色在线观看国产| 久久精品免费电影| 亚洲国产最新| 91蝌蚪视频在线| 色综合久久99| 在线中文字幕电影| 欧美日韩精品免费在线观看视频| 国模无码大尺度一区二区三区| 久久久精品免费看| 久久偷看各类女兵18女厕嘘嘘| 任你弄精品视频免费观看| 亚洲天堂av一区二区| 色综合色综合色综合| 伊人电影在线观看| 亚洲一二区在线| 91在线精品一区二区|