最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Node 調(diào)試工具入門教程

 更新時(shí)間:2018年03月20日 09:29:50   作者:阮一峰  
這篇文章主要介紹了淺談Node 調(diào)試工具入門教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

JavaScript 程序越來越復(fù)雜,調(diào)試工具的重要性日益凸顯??蛻舳四_本有瀏覽器,Node 腳本怎么調(diào)試呢?

2016年,Node 決定將 Chrome 瀏覽器的"開發(fā)者工具"作為官方的調(diào)試工具,使得 Node 腳本也可以使用圖形界面調(diào)試,這大大方便了開發(fā)者。

本文介紹如何使用 Node 腳本的調(diào)試工具。

一、示例程序

為了方便講解,下面是一個(gè)示例腳本。首先,新建一個(gè)工作目錄,并進(jìn)入該目錄。

$ mkdir debug-demo
$ cd debug-demo

然后,生成 package.json 文件,并安裝Koa 框架和 koa-route 模塊。

$ npm init -y
$ npm install --save koa koa-route

接著,新建一個(gè)腳本 app.js ,并寫入下面的內(nèi)容。

// app.js
const Koa = require('koa');
const router = require('koa-route');

const app = new Koa();

const main = ctx => {
 ctx.response.body = 'Hello World';
};

const welcome = (ctx, name) => {
 ctx.response.body = 'Hello ' + name;
};

app.use(router.get('/', main));
app.use(router.get('/:name', welcome));

app.listen(3000);
console.log('listening on port 3000');

上面代碼是一個(gè)簡(jiǎn)單的 Web 應(yīng)用,指定了兩個(gè)路由,訪問后會(huì)顯示一行歡迎信息。如果想詳細(xì)了解代碼的詳細(xì)含義,可以參考Koa 教程。

二、啟動(dòng)開發(fā)者工具

現(xiàn)在,運(yùn)行上面的腳本。

$ node --inspect app.js

上面代碼中, --inspect 參數(shù)是啟動(dòng)調(diào)試模式必需的。這時(shí),打開瀏覽器訪問 http://127.0.0.1//3000,就可以看到 Hello World 了。

接下來,就要開始調(diào)試了。一共有兩種打開調(diào)試工具的方法,第一種是在 Chrome 瀏覽器的地址欄,鍵入 chrome://inspect 或者 about:inspect ,回車后就可以看到下面的界面。

在 Target 部分,點(diǎn)擊 inspect 鏈接,就能進(jìn)入調(diào)試工具了。

第二種進(jìn)入調(diào)試工具的方法,是在 http://127.0.0.1//3000 的窗口打開"開發(fā)者工具",頂部左上角有一個(gè) Node 的綠色標(biāo)志,點(diǎn)擊就可以進(jìn)入。

三、調(diào)試工具窗口

調(diào)試工具其實(shí)就是"開發(fā)者工具"的定制版,省去了那些對(duì)服務(wù)器腳本沒用的部分。

它主要有四個(gè)面板。

  1. Console:控制臺(tái)
  2. Memory:內(nèi)存
  3. Profiler:性能
  4. Sources:源碼

這些面板的用法,基本上跟瀏覽器環(huán)境差不多,這里只介紹 Sources (源碼)面板。

四、設(shè)置斷點(diǎn)

進(jìn)入 Sources 面板,找到正在運(yùn)行的腳本 app.js 。

在第11行(也就是下面這一行)的行號(hào)上點(diǎn)一下,就設(shè)置了一個(gè)斷點(diǎn)。

ctx.response.body = 'Hello ' + name;

這時(shí),瀏覽器訪問 http://127.0.0.1:3000/alice ,頁面會(huì)顯示正在等待服務(wù)器返回。切換到調(diào)試工具,可以看到 Node 主線程處于暫停(paused)階段。

進(jìn)入 Console 面板,輸入 name,會(huì)返回 alice。這表明我們正處在斷點(diǎn)處的上下文(context)。

再切回 Sources 面板,右側(cè)可以看到 Watch、Call Stack、Scope、Breakpoints 等折疊項(xiàng)。打開 Scope 折疊項(xiàng),可以看到 Local 作用域和 Global 作用域里面的所有變量。

Local 作用域里面,變量 name 的值是 alice ,雙擊進(jìn)入編輯狀態(tài),把它改成 bob 。

然后,點(diǎn)擊頂部工具欄的繼續(xù)運(yùn)行按鈕。

頁面上就可以看到 Hello bob 了。

命令行下,按下 ctrl + c,終止運(yùn)行 app.js 。

五、調(diào)試非服務(wù)腳本

Web 服務(wù)腳本會(huì)一直在后臺(tái)運(yùn)行,但是大部分腳本只是處理某個(gè)任務(wù),運(yùn)行完就會(huì)終止。這時(shí),你可能根本沒有時(shí)間打開調(diào)試工具。等你打開了,腳本早就結(jié)束運(yùn)行了。這時(shí)怎么調(diào)試呢?

$ node --inspect=9229 -e "setTimeout(function() { console.log('yes'); }, 30000)"

上面代碼中, --inspect=9229 指定調(diào)試端口為 9229,這是調(diào)試工具默認(rèn)的通信端口。 -e 參數(shù)指定一個(gè)字符串,作為代碼運(yùn)行。

訪問 chrome://inspect ,就可以進(jìn)入調(diào)試工具,調(diào)試這段代碼了。

代碼放在 setTimeout 里面,總是不太方便。那些運(yùn)行時(shí)間較短的腳本,可能根本來不及打開調(diào)試工具。這時(shí)就要使用下面的方法。

$ node --inspect-brk=9229 app.js

上面代碼中, --inspect-brk 指定在第一行就設(shè)置斷點(diǎn)。也就是說,一開始運(yùn)行,就是暫停的狀態(tài)。

六、忘了寫 --inspect 怎么辦?

打開調(diào)試工具的前提是,啟動(dòng) Node 腳本時(shí)就加上 --inspect 參數(shù)。如果忘了這個(gè)參數(shù),還能不能調(diào)試呢?

回答是可以的。首先,正常啟動(dòng)腳本。

$ node app.js

然后,在另一個(gè)命令行窗口,查找上面腳本的進(jìn)程號(hào)。

$ ps ax | grep app.js 

30464 pts/11  Sl+  0:00 node app.js
30541 pts/12  S+   0:00 grep app.js

上面命令中, app.js 的進(jìn)程號(hào)是 30464

接著,運(yùn)行下面的命令。

$ node -e 'process._debugProcess(30464)'

上面命令會(huì)建立進(jìn)程 30464 與調(diào)試工具的連接,然后就可以打開調(diào)試工具了。

還有一種方法,就是向腳本進(jìn)程發(fā)送 SIGUSR1 信號(hào),也可以建立調(diào)試連接。

$ kill -SIGUSR1 30464

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • node.js中的fs.closeSync方法使用說明

    node.js中的fs.closeSync方法使用說明

    這篇文章主要介紹了node.js中的fs.closeSync方法使用說明,本文介紹了fs.closeSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 關(guān)于Yarn的使用及說明

    關(guān)于Yarn的使用及說明

    這篇文章主要介紹了關(guān)于Yarn的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解Nodejs中自動(dòng)化瀏覽器操作神器Puppeteer的使用

    詳解Nodejs中自動(dòng)化瀏覽器操作神器Puppeteer的使用

    Puppeteer是一個(gè)JavaScript庫,它提供了一種方式來通過DevTools協(xié)議控制無頭瀏覽器,本文主要為大家介紹了Puppeteer的主要特性和使用方法,感興趣的可以了解下
    2024-01-01
  • 關(guān)于node.js版本npm -v報(bào)錯(cuò)問題的解決方法

    關(guān)于node.js版本npm -v報(bào)錯(cuò)問題的解決方法

    最近工作中遇到了些問題,這里總結(jié)下,下面這篇文章主要給大家介紹了關(guān)于node.js版本npm -v報(bào)錯(cuò)問題的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • nodejs和npm版本不匹配報(bào)錯(cuò)的解決方法

    nodejs和npm版本不匹配報(bào)錯(cuò)的解決方法

    當(dāng)公司要求使用固定nodejs的版本時(shí),自己不小心更新了npm,就會(huì)導(dǎo)致npm和nodejs不匹配,下面這篇文章主要給大家介紹了關(guān)于nodejs和npm版本不匹配報(bào)錯(cuò)的解決方法,需要的朋友可以參考下
    2023-04-04
  • nodejs 遞歸拷貝、讀取目錄下所有文件和目錄

    nodejs 遞歸拷貝、讀取目錄下所有文件和目錄

    這篇文章主要介紹了nodejs 遞歸拷貝、讀取目錄下所有文件和目錄,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • nodejs個(gè)人博客開發(fā)第二步 入口文件

    nodejs個(gè)人博客開發(fā)第二步 入口文件

    這篇文章主要為大家詳細(xì)介紹了nodejs個(gè)人博客開發(fā)的入口文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • node.js中的fs.existsSync方法使用說明

    node.js中的fs.existsSync方法使用說明

    這篇文章主要介紹了node.js中的fs.existsSync方法使用說明,本文介紹了fs.existsSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • VSCode使用npm的詳細(xì)步驟

    VSCode使用npm的詳細(xì)步驟

    為了避免造輪子,我們有時(shí)候會(huì)用到其他人的勞動(dòng)成果,比如一些優(yōu)秀的框架,比如Express,我們直接使用NPM下載下來就可以用了,降低開發(fā)成本和時(shí)間,這篇文章主要給大家介紹了關(guān)于VSCode使用npm的詳細(xì)步驟,需要的朋友可以參考下
    2022-09-09
  • node.js實(shí)現(xiàn)回調(diào)的方法示例

    node.js實(shí)現(xiàn)回調(diào)的方法示例

    這篇文章主要介紹了node.js實(shí)現(xiàn)回調(diào)的方法,結(jié)合實(shí)例形式分析了node.js實(shí)現(xiàn)向回調(diào)函數(shù)傳遞參數(shù)、閉包的使用及鏈?zhǔn)交卣{(diào)相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

怀集县| 武穴市| 澄江县| 千阳县| 伊通| 河间市| 繁昌县| 汉源县| 张家口市| 海门市| 遂平县| 九龙坡区| 绥芬河市| 江北区| 临沧市| 南漳县| 仲巴县| 神农架林区| 抚州市| 含山县| 介休市| 堆龙德庆县| 凤山县| 绿春县| 洱源县| 利川市| 长宁区| 嘉善县| 庆阳市| 石台县| 莆田市| 明溪县| 日喀则市| 来安县| 湖南省| 安多县| 亳州市| 会同县| 新晃| 泰兴市| 济宁市|