Node.js Debugger

作者: 小菜荔枝 | 来源:发表于2017-05-03 19:31 被阅读150次

    Debugger

    稳定性:2-Stable

    Debugger

    为了方便开发,开发人员可以使用Debugger模块进行调试,其功能是基于TCP协议和Node.js内置的调试客户端实现的,使用时添加命令行参数debug即可。照比一些IDE的调试功能,Debugger还不是很全面,但也可以满足大多数的调试需求

    $ node debug main.js
    < Debugger listening on [::]:5858
    connecting to 127.0.0.1:5858 ... ok
    break in main.js:477
     475 
     476 
    >477 const Koa = require('koa');
     478 const app = new Koa();
     479 // app.use(async (ctx, next) => {
    debug> 
    

    如果想在调试的时候设置断点,可以在你的源代码中添加debugger语句,这样调试时程序就会在这行停住

    // 一个简单的demo main.js
    let a = `Hello I am a`;
    let b = ['I', 'am', 'b'];
    let obj = {
      string: 'string',
      arr: [1,2,3],
      num: 1
    }
    debugger;// 在这里设置断点
    console.log('finish debugger');
    

    开始调试main.js,这次调试的目的是在断点停住时查看a,b,obj的值,具体说明请看下面的注释

    $ node debug main.js 
    < Debugger listening on [::]:5858
    connecting to 127.0.0.1:5858 ... ok
    break in main.js:491
     489 // console.log(`server is running at ${port}`);
     490 
    >491 let a = `Hello I am a`;  // 程序运行的第一行代码会默认设置断点,在这停住
     492 let b = ['I', 'am', 'b'];
     493 let obj = {
    debug> c  // c代表代码继续执行
    break in main.js:498
     496   num: 1
     497 }
    >498 debugger;  // 这一行停住
     499 console.log('finish debugger');
     500 });
    debug> repl  // 开启repl,Ctrl + C退出repl
    Press Ctrl + C to leave debug repl
    > a  //查看a变量
    'Hello I am a'
    > b //查看b变量
    [ 'I', 'am', 'b' ]
    > obj //查看obj变量
    { string: 'string', arr: [ 1, 2, 3 ], num: 1 }
    > test // 查看test,但是没有定义
    ReferenceError: test is not defined
    debug> c  //退出repl后再次继续运行代码
    < finish debugger
    debug> 
    

    Command reference

    下面介绍调试常用的一些命令,您也可以在调试的过程中输入help来查看这些命令

    Stepping
    • cont, c - 程序继续运行
    • next, n - 程序继续运行(一行)
    • step, s - 进入某些方法,函数
    • out, o - 跳出某些方法,函数
    • pause - 暂停
    Breakpoints
    • setBreakpoint(), sb() - 在当前行设置断点
    • setBreakpoint(line), sb(line) - 在指定行设置断点
    • setBreakpoint('fn()'), sb(...) - 在函数体的第一个语句设置断点
    • setBreakpoint('script.js', 1), sb(...) - 在文件script.js的第一行设置断点
    • clearBreakpoint('script.js', 1), cb(...) - 取消文件script.js的第一行的断点
    Information
    • backtrace, bt - 打印backtrace追溯信息
    • list(5) - 显示源码的内容,前5行和后5行
    • watch(expr) - 添加监视器,可以随时查看变量的值。比如,作者想监视a变量,就执行watch('a')即可,然后通过watchers进行查看
    • unwatch(expr) - 移除指定的监视器
    • watchers - 展示监视器所监视的变量的值(在每个断点停下时都会自动显示watchers)
    • repl - 开启repl
    • exec expr - 在调试过程中执行表达式,比如更改a变量的值,可以执行exec a = 2
    Execution control
    • run - 执行程序,在调试开始时会自动运行
    • restart - 重启程序
    • kill - 结束程序
    Various
    • scripts - 展示所有加载的脚本
    • version - V8版本

    Advanced Usage

    如果一个Node.js的程序通过--debug参数启动的(注意是--debug不是debug),如下图,通过--debug参数启动程序,我们可知Debugger URLpid分别是127.0.0.1:585810547,根据这两个值也可以直接调试该程序

    • node debug -p <pid> 通过pid调试,例如node debug -p 10547
    • node debug <URL> 通过URL调试,例如node debug 127.0.0.1:5858
    pid 和 URL 的用法

    V8 Inspector Integration for Node.js

    通过V8强大的集成监视器来调试,注意,这只是一个实验性的功能。通过它,我们就可以使用Chrome DevTools来调试我们的Node.js程序,使用命令行参数--inspect即可,这时,Debugger会默认监听9229端口,如果想指定Debugger的端口,如8888端口,可以使用--inspect=8888,如果想在程序的第一行打断点停住,可以加上--debug-brk参数,直接上图

    V8 Debugger

    本文档是根据文档Node.js v6.10.3 Documentation进行总结的,如您在阅读的过程中发现问题,请联系作者,感谢您的支持!

    简书作者 小菜荔枝 转载请联系作者获得授权

    相关文章

      网友评论

        本文标题:Node.js Debugger

        本文链接:https://www.haomeiwen.com/subject/mmehtxtx.html