<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Chrome Devtools 調試您的 Node.js 程序

          共 3116字,需瀏覽 7分鐘

           ·

          2020-12-26 23:10

          今日文章由 “Node.js技術棧@五月君” 授權分享,正文從下面開始~


          俗話說:“工欲善其事,必先利其器”,調試是每一個開發(fā)人員都要遇到的問題,選擇一個合適的調試工具也尤為重要。 在 Node.js 開發(fā)過程中除了萬能的 console.log 之外,本節(jié)介紹一個 Node.js 與 Chrome Devtools 結合的調試工具,以后你可以選擇使用瀏覽器來調試 Node.js 應用程序了。

          啟動調試器

          創(chuàng)建測試代碼

          const?fs?=?require('fs');
          const?path?=?require('path');
          const?filePath?=?path.resolve(__dirname,?'hello.txt')

          console.log('filePath:?',?filePath);

          fs.readFile(filePath,?(err,?res)?=>?{
          ??console.log(err,?res.toString());
          });

          運行帶有 --inspect-brk 標志的 node

          啟動時在 node 后面加上 --inspect-brk? 標志,Node.js 將監(jiān)聽調試客戶端,默認情況下監(jiān)聽在 127.0.0.1:9229 地址,也可以顯示指定地址 --inspect-brk=_host:port_

          $?node?--inspect-brk?app.js
          Debugger?listening?on?ws://127.0.0.1:9229/c7a51e5a-d9be-4506-83fb-0a9340d2b9ba
          For?help,?see:?https://nodejs.org/en/docs/inspector

          注意 node --inspect 與 node --inspect-brk 的區(qū)別:--inspect 不會終斷,--inspect-brk 在用戶代碼啟動之前會終斷,也就是代碼在第一行就會暫停執(zhí)行。

          在 Chrome 中打開

          瀏覽器地址欄輸入 chrome://inspect/?按回車鍵,如下所示:


          Remote Target 下展示了當前運行的 Node.js 版本號,打開 inspect?或 Open dedicated Devtools for Node?鏈接,如下所示:


          斷點調試

          調試工具窗口介紹

          上方展示與服務器端調試需要的 5 個面板,和 Chrome 開發(fā)工具中的是基本相同的,可以理解為 “服務端的定制版”

          • Connection:鏈接
          • Console:控制臺
          • Sources:源代碼調試(本節(jié)主要講的)
          • Memory:內存,查找影響性能的內存問題,包括內存泄漏、內存膨脹和頻繁的垃圾回收
          • Profiler:性能


          右上角的五個圖表,從左至右依次分別表示:

          • Resume script execution(F8): 恢復腳本執(zhí)行,每一次都會自動執(zhí)行到斷點處。
          • Step over next function call(F10):跳過下一個函數(shù)調用,執(zhí)行當前代碼行,在當前代碼行的下一行處停止,是一步一步的操作。
          • Step into next function call(F11):單步進入下一個函數(shù)調用。
          • Step out next function call(F11):單步退出下一個函數(shù)調用。
          • Step(F9):執(zhí)行當前代碼行并在下一行處停止。

          設置斷點

          在 Source 選項卡下,找到 app.js 這是我們測試腳本的入口文件,如果是執(zhí)行的 --inspect-brk 標志,默認會停留在代碼第一行處。

          第一種設置斷點的方式,是在程序里加入 debugger 命令。

          第二種設置斷點的方式是在編輯器窗口中單擊要設置的代碼行,此時編輯器窗口中該行會處于被選中狀態(tài),還有一個右側的小箭頭。另外右下方 Breakpoints 面板中也展示出了我們設置的斷點。


          取消斷點,再次單擊選中的代碼行左側,起到切換作用,或者右鍵選擇 ? Remove breakpoint


          欲了解更多斷點調試相關內容,參考了解 Chrome DevTools 更多信息,參考 使用斷點暫停代碼

          對已啟動 Node.js 進程做調試

          如果一個 Node.js 進程啟動時沒有加 --inspect-brk 標志,但是我們又不想重啟進程來調試,這個時候怎么辦?以下兩種方式任何一種都可以:

          方式一:process._debugProcess(PID)

          找到當前啟動的 Node 進程 ID,之后使用 node -e 'process._debugProcess(26853)' 會建立進程 26853 與調試工具的鏈接。

          $?ps?ax?|?grep?app.js?
          26864?s001??S+?????0:00.01?grep?app.js
          26853?s002??S+?????0:00.09?node?app.js

          $
          ?node?-e?'process._debugProcess(26853)'
          SIGUSR1

          方式二:SIGUSR1 信號

          向 Node 進程發(fā)送 SIGUSR1 信號,也可以建立與調試工具的鏈接。在 Windows 上不可用,還需要注意版本,在 Node.js Version 8 或更高版本中將激活 Inspect API。

          $?kill?-SIGUSR1?26853

          測試

          以下對 Demo 做了修改,創(chuàng)建一個 HTTP Server 每收到一個請求讀取文件,如果按照以上方式開啟調試工具后,在瀏覽器輸入 http://localhost:3000 回車后,會自動跳轉到調試界面,現(xiàn)在你可以設置斷點,向上面的方式一樣進行調試。

          **Tips:**當前程序運行在斷點第 6 行,鼠標移動到 req.url 上之后會看到該屬性對應的值。


          遠程調試

          如果是在服務器上調試,建議不要讓調試器監(jiān)聽公共 IP 地址,這可能會引起遠程訪問的安全風險,但我們又想用本地的方式調試該怎么辦呢?

          如果要允許遠程調試鏈接,建議是使用 SSL 隧道的方式,假設我們的服務運行在服務器 debug.nodejs.red 上,首先啟動服務,和上面的方式一樣。

          $?node?--inspect-brk?app.js

          設置 SSH 隧道

          在本地計算機上設置 SSH 隧道,這將使本地計算機上端口為 9221 接收的鏈接轉換到服務器 debug.nodejs.red 上的 9229 端口。

          $?ssh?-L?9221:localhost:[email protected]

          Chrome DevTools 調試器的 Connection 中增加鏈接

          默認情況下,Connection 下只有一個 localhost:9229,在添加 1 個 localhost:9221 之后我們就可以向在本地運行 Node.js 程序一樣進行調試。


          Reference

          • chrome-devtools
          • debugging-getting-started
          ??愛心三連擊

          1.看到這里了就點個在看支持下吧,你的點贊,在看是我創(chuàng)作的動力。

          2.關注公眾號程序員成長指北,回復「1」加入高級前端交流群!「在這里有好多 前端?開發(fā)者,會討論?前端 Node 知識,互相學習」!

          3.也可添加微信【ikoala520】,一起成長。

          “在看轉發(fā)”是最大的支持

          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产免费一级视频 | 天堂一区二区三区18在线观看 | 日韩无码性爱 | 特级西西444Ww高清大胆 | 丁香婷|