如何调试Node.js服务器应用程序?
现在,我主要使用如下打印语句的警报调试:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?
如何调试Node.js服务器应用程序?
现在,我主要使用如下打印语句的警报调试:
sys.puts(sys.inspect(someVariable));
必须有更好的调试方法。我知道Google Chrome有一个命令行调试器。这个调试器也适用于Node.js吗?
当前回答
我最初的反应是几年前的预视工作室。
因此,hapi使用GOOD是一个很棒的日志记录包,但要进行调试,请使用visual studio。
最初的回应(很久以前):我会使用沃尔玛实验室的GOOD。它可以完成任务,而且非常灵活:
var hapi = require('hapi');
var good = require('good');
var server = hapi.createServer('localhost', 5000,{});
server.route({SOME ROUTE HERE});
server.start();
var options = {
subscribers: {
'console': ['ops', 'request', 'log', 'error'],
'http://localhost/logs': ['log']
}
};
server.pack.require('good', options, function (err) {
if (!err) {
console.log('Plugin loaded successfully');
}
});
其他回答
我将选择Visual Studio代码进行调试。没有安装任何工具或npm安装工具的开销。只需在package.json中设置应用程序的起点,VSCode就会自动在解决方案中创建一个配置文件。它是建立在Electron之上的,像Atom这样的编辑器都是建立在该之上的。
VS Code提供了与您可能拥有的类似的调试经验在其他IDE中,如VS、Eclipse等。
调试Node.JS应用程序的方法如下:
1) 安装devtool并用它启动应用程序
npm install devtool -g --save
devtool server.js
这将在chrome开发人员模式下打开,因此您可以放置调试器点并进行测试。
2) 使用节点检查器进行调试
node-inspector
3) 使用--debug调试
node --debug app.js
作为Google Chrome开发者工具的一部分发布的V8调试器可用于调试Node.js脚本。可以在Node.js GitHub wiki中找到这一工作原理的详细说明。
如果需要,可以使用纯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、浏览器)。你可以在这里读更多。
这里有很多很好的答案,但我想补充一下我的观点(基于我的方法的演变)
除错记录
让我们面对现实吧,我们都喜欢一个好的console.log(“哦,如果你到了这里,你最好跑一下。”),有时候这很有用,所以如果你不想离开它太远,至少可以通过Visionmedia的调试为你的日志添加一些亮点。
交互式调试
尽管控制台日志记录非常方便,但要进行专业调试,您需要卷起袖子并陷入其中。设置断点,单步执行代码,检查范围和变量,以了解导致这种奇怪行为的原因。正如其他人所提到的,节点检查器实际上是蜜蜂的膝盖。它完成了内置调试器所能做的一切,但使用了熟悉的ChromeDevTools界面。如果像我一样使用Webstorm,那么这里有一个方便的调试指南。
堆栈跟踪
默认情况下,我们无法在事件循环的不同周期(滴答声)中跟踪一系列操作。要解决这个问题,请查看longjohn(但不在生产中!)。
内存渗漏体
使用Node.js,我们可以让服务器进程保持相当长的时间。如果你认为它引发了一些严重的泄漏,你该怎么办?使用heapdump和ChromeDevTools比较一些快照,看看有什么变化。
有关一些有用的文章,请查看
RisingStack-调试Node.js应用程序nearForm的David Mark Clements的优秀文章
如果你想看视频,那么
Netflix JS Talks-调试生产中的Node.JS跟踪工作组关于跟踪和调试node.js的有趣视频关于节点检查器的15分钟视频
无论您选择什么路径,只要确保您了解如何调试
这是一件痛苦的事看看你自己的麻烦你自己和其他人都没有成功索福克勒斯,阿贾克斯