关于javascript:如何调试node.js应用程序?

How do I debug Node.js applications?

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

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

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

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


节点检查器可以节省一天的时间!从任何支持WebSocket的浏览器中使用它。断点、探查器、LiveCoding等…真是太棒了。

安装时使用:

1
npm install -g node-inspector

然后运行:

1
node-debug app.js


调试

  • 乔恩特指南
  • 调试器
  • 节点检查器
  • Visual Studio代码
  • CYLD9
  • 括号

仿形

  • node --prof ./app.js
  • node --prof-process ./the-generated-log-file
  • 堆堆

    • 使用chrome开发工具的节点堆转储

    火焰图

    • 0X
    • JAM3/DEVTOOL,然后是Chrome Developer工具火焰图
    • DTrace和Stackvis-仅在SmartOS上支持

    示踪

    • 带有tracegl的交互式堆栈跟踪

    登录中

    输出调试信息的库

    • 毛虫
    • 示踪剂

    增强堆栈跟踪信息的库

    • 朗约翰

    标杆管理

    • 阿帕奇长凳:ab -n 100000 -c 1 http://127.0.0.1:9778/
    • WRK

    其他

    • 痕迹
    • 优势
    • 家伙
    • 谷歌追踪框架
    • 保罗爱尔兰指南

    遗产

    这些功能用于工作,但不再维护或不再适用于现代节点版本。

    • https://github.com/bnoordhuis/node-profiler-替换为内置调试
    • https://github.com/c4milo/node-webkit-agent-由节点检查器替换
    • https://nodetime.com/-失效


    作为google chrome开发工具的一部分发布的V8调试器可用于调试node.js脚本。可以在node.js github wiki中找到有关如何工作的详细说明。


    从6.3版开始,节点有自己的内置GUI调试器(使用Chrome的devtools)

    Nodes builtin GUI debugger

    只需传递inspector标志,就会向您提供一个指向inspector的URL:

    1
    node --inspect server.js

    你也可以在第一行通过--inspect-brk而中断。

    要自动打开Chrome窗口,请使用"检查进程"模块。

    1
    2
    3
    4
    5
    # install inspect-process globally
    npm install -g inspect-process

    # start the debugger with inspect
    inspect script.js


    node.js版本0.3.4+具有内置调试支持。

    node debug script.js

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


    我可以选择使用Visual Studio代码进行调试。安装任何工具或npm install材料都不会产生开销。只要在package.json中设置应用程序的起点,vscode就会在解决方案中自动创建一个配置文件。它是建立在电子上的,在电子上建立了像Atom这样的编辑器。

    VS Code gives similar debugging experience as you might have
    had in other IDEs like VS, Eclipse, etc.

    enter image description hereenter image description here


    我个人使用JetBrains Webstorm,因为它是我发现的唯一一个javascript IDE,它对前端和后端的javascript都很好。

    它在多个操作系统上工作,内置node.js调试(以及大量其他东西)(http://www.jetbrains.com/webstorm/features/index.html)。

    我唯一的‘问题’/wishlist itemsarewere:

  • 在Mac上似乎比Windows更需要资源。在版本6中,它不再是一个问题。
  • 如果它有代码段支持(如Sublime Text 2的支持,即键入"fun",然后点击"tab"以放入函数。请参阅@wickynilliams comment below-with live templates you also have snippet support.

  • Thesus是AdobeResearch的一个项目,它允许您在node.js的开源编辑器中调试代码。它有一些有趣的特性,如实时代码覆盖、追溯检查、异步调用树。

    screenshot


    这里有很多很好的答案,但我想添加我的观点(基于我的方法的发展)

    除错记录

    让我们面对现实吧,我们都喜欢一个好的console.log('Uh oh, if you reached here, you better run.'),有时候效果很好,所以如果你不愿意离开它太远,至少在你的日志中添加一些关于visionmedia调试的Bling。

    交互式调试

    尽管控制台日志记录很方便,但要专业地进行调试,您需要卷起袖子,陷入困境。设置断点,单步执行代码,检查范围和变量,看看是什么导致了这种奇怪的行为。正如其他人提到的,节点检查员实际上是蜜蜂的膝盖。它可以用内置的调试器做任何事情,但是使用熟悉的chrome devtools接口。如果像我一样,您使用Webstorm,那么这里有一个从那里调试的方便指南。

    堆栈跟踪

    默认情况下,我们不能在事件循环的不同周期(ticks)中跟踪一系列操作。为了解决这个问题,请看一下Longjohn(但不是在制作中!).

    内存渗漏体

    使用node.js,我们可以让一个服务器进程在相当长的时间内保持正常运行。如果你认为它造成了一些严重的泄漏,你该怎么办?使用heapdump和chrome devtools比较一些快照,看看有什么变化。

    对于一些有用的文章,请查看

    • risingstack-调试node.js应用程序
    • 大卫·马克·克莱门茨的优秀文章

    如果你想看视频,那么

    • Netflix JS Talks-在生产中调试node.js
    • 来自跟踪和调试node.js跟踪工作组的有趣视频
    • 关于节点检查器的15分钟视频非常有用

    无论您选择什么路径,只要确保您了解如何调试

    enter image description here

    It is a painful thing
    To look at your own trouble and know
    That you yourself and no one else has made it

    Sophocles, Ajax


    node.js tools for Visual Studio 2012或2013包含一个调试器。这里的概述说明"node.js tools for Visual Studio包含对调试节点应用程序的完整支持"。刚接触node.js,但在.NET中有背景,我发现这个外接程序是调试node.js应用程序的好方法。


    Visual Studio代码具有非常好的node.js调试支持。它是免费、开源和跨平台的,运行在Linux、OS X和Windows上。

    你甚至可以调试咕噜和咕噜的任务,如果你需要…


    我编写了一个不同的方法来调试node.js代码,它是稳定的,非常简单。网址为https://github.com/s-a/iron-node。

    Enter image description here

    一个开源跨平台可视化调试器。

    安装:

    npm install iron-node -g;

    Debug:

    iron-node yourscript.js;


    如果使用Atom IDE,则可以安装node-debugger包。


    使用Chrome版本67.0.3396.62(+)

  • 运行节点应用程序
  • node --inspect-brk=0.0.0.0:9229 server.js(server js filename)

  • 在chrome中浏览应用程序,例如"localhost:port"
  • Open DevTools。
  • 单击响应设备图标旁边的节点图标。
  • enter image description here

    将有另一个devtools窗口弹出,专门用于调试节点应用程序。

    enter image description here


    我创建了一个名为pry.js的整洁的小工具,可以帮助您解决问题。

    在代码中的某个地方放置一个简单的语句,正常运行脚本,node将停止当前线程,使您能够访问所有变量和函数。随意查看/编辑/删除!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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中有内置的命令行调试器客户端。Cloud9IDE也有非常好的(可视化)调试器。


    Visual Studio代码可用于调试。


    对于那些不确定从哪里开始的人,我编写了一个简短的node.js调试入门。


    如果您需要一个强大的node.js日志库,那么tracer https://github.com/baryon/tracer是一个更好的选择。

    它输出带有时间戳、文件名、方法名、行号、路径或调用堆栈的日志消息,支持颜色控制台,并轻松支持数据库、文件、流传输。我是作者。


    假设您的计算机上安装了节点检查器(如果没有,只需键入"npm install-g node inspector"),您只需运行:

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

    并将命令行中的URI粘贴到webkit(chrome/safari)浏览器中。


    为了完整起见:

    pycharm 3.0+node.js插件提供了出色的开发+运行+调试体验。


    用Webstorm!它非常适合于调试node.js应用程序。它有一个内置的调试器。查看以下文档:https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html


    使用--inspect标志启动节点进程。

    node --inspect index.js

    然后打开镀铬的chrome://inspect。单击"为节点打开专用devtools"链接或安装此chrome扩展以轻松打开chrome devtools。

    有关详细信息,请参阅此链接


    有新的开源nodeclipse项目(作为Eclipse插件或enide studio):

    http://www.nodeclipse.org/img/nodeclipse-1-debugging.png

    NodEclipse成为2013年Eclipse十大最新插件之一。它使用了一个改进的V8调试器(从谷歌浏览器开发者工具为Java)。

    nodeclipse是每个月初发布的免费开源软件。


    NetBeans IDE从8.1版开始就支持node.js:

    <...>

    New Feature Highlights

    Node.js Application Development

    • New Node.js project wizard
    • New Node.js Express wizard
    • Enhanced JavaScript Editor
    • New support for running Node.js applications
    • New support for debugging Node.js applications.

    <...>

    其他参考:

  • Netbeans wiki/newandnoteworthynb81。
  • netbeans ide中的node.js Express应用程序,Geertjan Oracle。

  • 有很多可能性…

    • 节点包含调试实用程序
    • 节点检查器
    • 代码编辑器/IDES(请参阅以下调试说明之一)
      • 原子,
      • VSCODE
      • 网络风暴
      • 更多

    调试支持通常使用V8调试协议或更新的chrome调试协议来实现。


    intellij非常适合node.js。

    此外,Intellij还支持"代码辅助"。


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

    1
    $ npm install -g browserify

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

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

    (缺点是,您要么移动,要么对所有文件中的requires进行评论。)

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

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

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


    1
    node-debug -p 8888 scriptFileName.js

    使用此命令

    1
    2
    3
    DEBUG_LEVEL=all node file.js
    DEBUG=* node file.js
    node file.js --inspect

    ndb是一种改进的node.js调试体验,由chrome devtools支持。

    网址:https://github.com/googlechromelabs/ndb


    我最初的反应是几年前的Visual Studio。

    因此,使用good by hapi是一个很好的日志记录包,但是对于调试来说,使用Visual Studio。

    原始响应(很久以前):我会在沃尔玛实验室使用good。它可以完成任务,而且非常灵活:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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');
        }
    });


    如果愿意,可以使用pure node.js并在控制台中调试应用程序。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let a = 5;
    debugger;

    a *= 2;
    debugger;

    let b = 10;
    debugger;

    let c = a + b;
    debugger;

    console.log(c);

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

    1
    node inspect debug.js

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

    1
    2
    3
    4
    5
    6
    7
    < 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继续,
    • next转到下一个断点,
    • in介入,
    • out退出
    • pause暂停

    让我们输入cont几次,看看如何从一个断点到另一个断点:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    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命令来检查此时的变量值。这将允许您写入变量名并查看其值:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    debug> repl
    Press Ctrl + C to leave debug repl
    > a
    5
    > b
    undefined
    > c
    undefined
    >

    您可能会看到我们现在有a = 5bc未定义。

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


    可以使用以下方法调试node.js应用程序:

    1)安装devtool并用它启动应用程序

    1
    2
    npm install devtool -g --save
    devtool server.js

    这将在chrome开发人员模式下打开,以便您可以放置调试程序点并进行测试。

    2)使用节点检查器进行调试

    1
    node-inspector

    3)调试——调试

    1
    node --debug app.js

    chrome dev工具这是一种开始调试客户端代码的简单方法。以下是使用chrome dev工具调试节点应用程序所需的步骤。在此处查看更多详细信息

    DEBUG NODE APP USING CHROME DEV TOOLS