如何调试Node.js服务器应用程序?
现在,我主要使用如下打印语句的警报调试:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?
如何调试Node.js服务器应用程序?
现在,我主要使用如下打印语句的警报调试:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?
当前回答
从“文件”->“首选项”->“设置”->“搜索自动附加”并将其设置为“打开”,打开控制台(ctrl+*)或从菜单“终端”->“新建终端”,在代码中设置断点,键入命令
node --inspect <name of your file>
这将启动调试,VS代码将显示调试菜单。
注意:如果使用节点集群工作线程,自动附加也非常有用。
其他回答
node-debug -p 8888 scriptFileName.js
有一个新的开源Nodeclipse项目(作为Eclipse插件或EnideStudio):
Nodeclipse在2013年Eclipse Top 10 NEW Plugins中排名第一。它使用了一个经过修改的V8调试器(来自Google Chrome Developer Tools for Java)。
Nodeclipse是每个月初发布的免费开源软件。
请尝试有趣的方法来调试Node.js应用程序(不仅仅是)使用智能日志
https://github.com/darky/the-most-convenient-debug
使用IDE
在WebStorm中,您只需打开package.json文件,然后从那里以DEBUG模式运行脚本。只需单击侧面的绿色播放按钮。
带有--检查
如果要在没有IDE的情况下直接从CLI调试应用程序,那么可以运行类似node index.js--inspect的脚本。默认情况下,它将侦听端口5858,允许您连接调试器。或者,您可以使用--inspect=55858指定不同的端口。
带有环境变量
创建一个脚本myInspector.js,如下所示:
let inspector = require("inspector");
// you could explicitly specify a port.
// or alternatively set it to 0 to get any available port.
const port = 0;
inspector.open(port, undefined, true);
// print the url which also reveals the port.
const url = inspector.url()
console.log(url);
设置环境变量NODE_OPTIONS=“--requiremyInspector.js”启动脚本。
事实上,这也是WebStorm注入检查器的方式。美妙之处在于,无论您使用哪种发射器,它都能正常工作。所以你可以跑。。。,节点ts。。。或者甚至使用一些.sh/.bat文件。
如果需要,可以使用纯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、浏览器)。你可以在这里读更多。