如何调试Node.js服务器应用程序?

现在,我主要使用如下打印语句的警报调试:

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

必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?


当前回答

如果需要,可以使用纯Node.js并在控制台中调试应用程序。

例如,让我们创建一个要调试的虚拟debug.js文件,并在其中放置断点(调试器语句):

设a=5;调试器;a*=2;调试器;设b=10;调试器;设c=a+b;调试器;控制台日志(c);

然后可以使用inspect命令运行此文件进行调试:

node inspect debug.js

这将在控制台中启动调试器,您将使用类似于以下内容的输出:

< Debugger listening on ws://127.0.0.1:9229/6da25f21-63a0-480d-b128-83a792b516fc
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3

您可能会注意到,文件执行已在第一行停止。从这一刻起,您可以使用以下命令(热键)逐步浏览文件:

继续,接下来转到下一个断点,在步骤中,走出去暂停以暂停

让我们多次键入cont,看看如何从断点切换到断点:

debug> next
break in misc/debug.js:1
> 1 (function (exports, require, module, __filename, __dirname) { let a = 5;
  2 debugger;
  3
debug> next
break in misc/debug.js:2
  1 (function (exports, require, module, __filename, __dirname) { let a = 5;
> 2 debugger;
  3
  4 a *= 2;
debug> next
break in misc/debug.js:4
  2 debugger;
  3
> 4 a *= 2;
  5 debugger;
  6

我们现在可以做的是通过编写repl命令来检查变量值。这将允许您写入变量名称并查看其值:

debug> repl
Press Ctrl + C to leave debug repl
> a
5
> b
undefined
> c
undefined
>

你可能会看到,此时a=5,b和c未定义。

当然,对于更复杂的调试,您可能需要使用一些外部工具(IDE、浏览器)。你可以在这里读更多。

其他回答

仅为完整起见:

PyCharm 3.0+Node.js插件提供了很棒的开发+运行+调试体验。

作为Google Chrome开发者工具的一部分发布的V8调试器可用于调试Node.js脚本。可以在Node.js GitHub wiki中找到这一工作原理的详细说明。

从“文件”->“首选项”->“设置”->“搜索自动附加”并将其设置为“打开”,打开控制台(ctrl+*)或从菜单“终端”->“新建终端”,在代码中设置断点,键入命令

node --inspect <name of your file>

这将启动调试,VS代码将显示调试菜单。

注意:如果使用节点集群工作线程,自动附加也非常有用。

节点检查器可以节省一天!从任何支持WebSocket的浏览器使用它。断点、分析器、实时编码等……真是太棒了。

安装时使用:

npm install -g node-inspector

然后运行:

node-debug app.js

用您最喜欢的浏览器调试器调试小型Node.js脚本的一种快速而肮脏的方法是使用browserify。注意,这种方法不适用于任何需要本机I/O库的应用程序,但对于大多数小型脚本来说,它已经足够好了。

$ npm install -g browserify

现在将所有var x=requires('x')调用移动到requires.js文件中并运行:

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

(这里的缺点是,您必须移动或注释所有文件中的要求。)

在HTML文件中包含bundle.js,如下所示:

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

现在在浏览器中加载文件,然后在浏览器中按F12和viola:debug。