簡體   English   中英

如何調試 Node.js 應用程序?

[英]How do I debug Node.js applications?

如何調試 Node.js 服務器應用程序?

現在我主要使用帶有打印語句的警報調試,如下所示:

sys.puts(sys.inspect(someVariable));

一定有更好的調試方法。 我知道谷歌瀏覽器有一個命令行調試器。 這個調試器也可用於 Node.js 嗎?

節點檢查員可以節省一天! 從任何支持WebSocket 的瀏覽器中使用它。 斷點、分析器、實時編碼等……真是太棒了。

安裝它:

npm install -g node-inspector

然后運行:

node-debug app.js

調試

剖析

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

堆轉儲

火焰圖

追蹤

日志記錄

輸出調試信息的庫

增強堆棧跟蹤信息的庫

基准測試

其他

遺產

這些曾經可以工作,但不再維護或不再適用於現代節點版本。

作為 Google Chrome Developer Tools 的一部分發布的V8調試器可用於調試 Node.js 腳本。 可以在Node.js GitHub wiki 中找到有關其工作原理的詳細說明。

從 6.3 版開始,Node 有自己的內置GUI 調試器(使用 Chrome 的 DevTools)

節點內置 GUI 調試器

只需傳遞檢查員標志,您就會獲得檢查員的 URL:

node --inspect server.js

您也可以通過傳遞--inspect-brk來中斷第一行。

Node.js 0.3.4+ 版本具有內置的調試支持。

node debug script.js

手冊: http : //nodejs.org/api/debugger.html

Visual Studio Code將是我調試的選擇。 沒有安裝任何工具或npm install東西的開銷。 只需在 package.json 中設置您的應用程序的起點,VSCode 將自動在您的解決方案中創建一個配置文件。 它建立在Electron之上,Atom 等編輯器也建立在Electron之上。

VS Code 提供了與您在 VS、Eclipse 等其他 IDE 中可能擁有的類似調試體驗。

在此處輸入圖片說明 在此處輸入圖片說明

我個人使用JetBrains WebStorm,因為它是我發現的唯一一個同時適用於前端和后端 JavaScript 的 JavaScript IDE。

它適用於多個操作系統,並且內置了 Node.js 調試(以及大量其他東西)( http://www.jetbrains.com/webstorm/features/index.html )。

我唯一的“問題”/願望清單項目

  1. Mac 上似乎比 Windows 更需要資源在第 6 版中似乎不再是問題。
  2. 如果它有 Snippet 支持(就像Sublime Text 2 的那些 - 即輸入“fun”並點擊“tab”來輸入一個函數,那就太好了。 請參閱下面的@WickyNilliams 評論 - 使用實時模板,您還可以獲得代碼段支持。

這里有很多很棒的答案,但我想補充一下我的觀點(基於我的方法的演變方式)

調試日志

讓我們面對現實吧,我們都喜歡一個好的console.log('Uh oh, if you reached here, you better run.')有時這很好用,所以如果你不願離它太遠,至少添加使用Visionmedia 的 debug為您的日志添加一些亮點

交互式調試

盡管控制台日志記錄很方便,但要進行專業調試,您需要卷起袖子並陷入困境。設置斷點,單步執行代碼,檢查范圍和變量以查看導致這種奇怪行為的原因。 正如其他人所提到的,節點檢查器確實是蜜蜂膝蓋。 它使用內置調試器完成您可以做的所有事情,但使用熟悉的 Chrome DevTools 界面。 如果像我一樣,您使用Webstorm ,那么這里有一個方便的調試指南。

堆棧跟蹤

默認情況下,我們無法在事件循環的不同周期(滴答)中跟蹤一系列操作。 要解決這個問題,請查看longjohn (但不在生產中!)。

內存泄漏

使用 Node.js,我們可以讓服務器進程保持相當長的時間。 如果您認為它出現了一些令人討厭的泄漏,您會怎么做? 使用heapdump和 Chrome DevTools 比較一些快照,看看有什么變化。


對於一些有用的文章,請查看

如果您想觀看視頻,那么

無論你選擇什么路徑,只要確保你了解你是如何調試的

在此處輸入圖片說明

這是一件痛苦的事情
看看自己的煩惱就知道
你自己和沒有人做到了

索福克勒斯,阿賈克斯

忒修斯是 Adob​​e 研究的一個項目,它允許您在他們的開源編輯器Brackets 中調試您的 Node.js 代碼。 它有一些有趣的特性,比如實時代碼覆蓋、追溯檢查、異步調用樹。

截屏

適用於 Visual Studio 2012 或 2013 的Node.js 工具包括一個調試器。 此處的概述指出“適用於 Visual Studio 的 Node.js 工具包括對調試節點應用程序的完整支持。”。 作為 Node.js 的新手,但有 .NET 背景,我發現這個插件是調試 Node.js 應用程序的好方法。

Visual Studio Code有非常好的 Node.js 調試支持。 它是免費、開源和跨平台的,可在 Linux、OS X 和 Windows 上運行。

您甚至可以調試grunt 和 gulp 任務,如果您需要...

我編寫了一種不同的方法來調試 Node.js 代碼,它穩定且非常簡單。 它可以在https://github.com/sa/iron-node 上找到

在此處輸入圖片說明

一個開源的跨平台可視化調試器。

安裝:

npm install iron-node -g;

調試:

iron-node yourscript.js;

如果您使用的是Atom IDE ,則可以安裝node-debugger包。

使用 Chrome 版本 67.0.3396.62(+)

  1. 運行節點應用

node --inspect-brk=0.0.0.0:9229 server.js(服務器js文件名)

  1. 在 chrome 中瀏覽您的應用程序,例如“localhost:port”
  2. 打開開發者工具。
  3. 單擊響應設備圖標旁邊的節點圖標。

在此處輸入圖片說明

將有另一個 DevTools 窗口專門用於調試節點應用程序。

在此處輸入圖片說明

我創建了一個名為pry.js的簡潔小工具,可以幫助您解決問題。

在代碼中的某處放置一個簡單的語句,正常運行腳本,節點將停止當前線程,讓您可以訪問所有變量和函數。 隨意查看/編輯/刪除它們!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()

Node.js 中有內置的命令行調試器客戶端 Cloud 9 IDE 也有非常漂亮的(可視化)調試器

我為那些不確定從哪里開始使用node-inspector的人整理了一個簡短的Node.js 調試入門。

Visual Studio Code將在調試中為我們工作。

使用網絡風暴! 它非常適合調試 Node.js 應用程序。 它有一個內置的調試器。 在此處查看文檔: https : //www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

假設您的計算機上安裝了 node-inspector(如果沒有,只需鍵入“npm install -g node-inspector”),您只需要運行:

node-inspector & node --debug-brk scriptFileName.js

並將命令行中的 URI 粘貼到 WebKit(Chrome/Safari)瀏覽器中。

使用--inspect標志啟動您的節點進程。

node --inspect index.js

然后在 chrome 中打開chrome://inspect 單擊“打開專用 DevTools for Node”鏈接或安裝chrome 擴展以輕松打開 chrome DevTools。

有關更多信息,請參閱鏈接

如果你需要一個強大的 Node.js 日志庫, Tracer https://github.com/baryon/tracer是更好的選擇。

它輸出帶有時間戳、文件名、方法名、行號、路徑或調用堆棧的日志消息,支持顏色控制台,並支持數據庫、文件、流傳輸。 我是作者。

有新的開源Nodeclipse項目(作為 Eclipse 插件或Enide Studio ):

Nodeclipse 在2013 年 Eclipse 十大新插件中排名第一。 它使用經過修改的V8調試器(來自 Google Chrome Developer Tools for Java)。

Nodeclipse 是每月月初發布的免費開源軟件。

IntelliJ非常適合 Node.js。

此外,IntelliJ 很好地支持“代碼協助”。

有很多種可能...

調試支持通常使用v8 調試協議或更新的Chrome 調試協議來實現

NetBeans IDE 從8.1 版開始支持 Node.js:

<...>

新功能亮點

Node.js 應用程序開發

  • 新建 Node.js 項目向導
  • 新建 Node.js Express 向導
  • 增強的 JavaScript 編輯器
  • 對運行 Node.js 應用程序的新支持
  • 對調試 Node.js 應用程序的新支持。

<...>

補充參考:

  1. NetBeans Wiki/NewAndNoteworthyNB81
  2. NetBeans IDE 中的 Node.js Express 應用程序,Geertjan-Oracle

使用這個命令

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect

ndb 是一種改進的 Node.js 調試體驗,由 Chrome DevTools 啟用

https://github.com/GoogleChromeLabs/ndb

node-debug -p 8888 scriptFileName.js

使用您喜歡的瀏覽器調試器調試小型Node.js腳本的快捷方法是使用browserify 請注意,這種方法不適用於需要本機I / O庫的任何應用程序,但是對於大多數小型腳本而言,它已經足夠了。

$ npm install -g browserify

現在將您所有的var x = requires('x')調用移至requires.js文件並運行:

$ browserify requires.js -s window -o bundle.js

(這里的缺點是,你要么必須移動或發表意見requires在您的所有文件。)

像這樣在HTML文件中包含bundle.js

<script type="text/javascript" src="bundle.js"></script>

現在,將文件加載到瀏覽器中,然后按F12鍵和中提琴:在瀏覽器中調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM