📜  Node.js 调试

📅  最后修改于: 2022-05-13 01:56:27.659000             🧑  作者: Mango

Node.js 调试

Node.js 调试:调试是一个从软件应用程序中识别和删除错误的概念。在本文中,我们将了解调试 Node.js 应用程序的技术。

为什么不使用 console.log()?
使用console.log调试代码,一般会陷入“停止app,添加console.log,再启动app”操作的无限循环。除了减慢应用程序的开发速度外,它还会使编写变得肮脏并创建不必要的代码。最后,尝试注销变量以及其他潜在日志记录操作的噪音可能会使调试过程在尝试查找您正在调试的值时变得困难。

如何调试?
大多数情况下,我们使用了console.log() ,但如上所述,这并不总是一个好习惯。我们可以使用 V8 检查器。

调试步骤:

  1. 在终端窗口中编写如下代码,如下图:
    node --inspect-brk-filename.js

  2. 打开您的 Chrome 浏览器并编写检查,如下所示:
  3. 现在单击Open Dedicated DevTools for Node
  4. 现在,单击 Node.js 图标。终端将显示以下消息:

其他有助于启动 DevTools 窗口的工具:

june07.com/nim
github.com/jaridmargolin/inspect-process
github.com/darcyclarke/rawkit

其他调试 API:

  1. 调试现有的 Node 进程:
    process._debugProcess(pid);
  2. 类似 GDB 的 CLI 调试器:
    node inspect filename.js
    
  3. 通过 WS 端口使用 DevTools 协议驱动:
    const dp = require('chrome-remote-interface');
      
    async function test() {
    const client = await dp();
    const {Profiler, Runtime} = client;
      
    await Profiler.enable();
    await Profiler.setSamplingInterval({interval: 500});
      
    await Profiler.start();
    await Runtime.evaluate({expression: 'startTest();'});
    await sleep(800);
      
    const data = await Profiler.stop();
    require('fs').writeFileSync('data.cpuprofile',
                    JSON.stringify(data.profile));
    };
      
    test().then((result)=>{
        console.log(result);
    })
    .catch((error)=>{
        console.log(error);
    });
    
  4. 通过 require('inspector') 的 DevTools 协议:
    const inspector = require('inspector');
    const fs = require('fs');
    const session = new inspector.Session();
      
    session.connect();
    session.post('Profiler.enable');
    session.post('Profiler.start');
      
    setTimeout( function() {
        session.post('Profiler.stop', 
                 function(err, data) {
            fs.writeFileSync('data.cpuprofile',
                 JSON.stringify(data.profile));
        });
    }, 8000);
    

使用 Chrome 作为调试工具的另一个很棒的事情是,您可以使用相同的界面调试前端和后端 JavaScript 代码。