调试器(Debugger)

稳定度:2 - 稳定

Node.js 包含一个可以有效地通过 TCP 协议 访问的完整的进程外的全功能调试工具并内置调试客户端。在启动 Node.js 后,通过 debug 参数加上需要调试的脚本文件路径的方式使用,在调试器成功启动后会有明显的提示:

  1. $ node debug myscript.js
  2. < debugger listening on port 5858
  3. connecting... ok
  4. break in /home/indutny/Code/git/indutny/myscript.js:1
  5. 1 x = 5;
  6. 2 setTimeout(() => {
  7. 3 debugger;
  8. debug>

Node.js 的调试器客户端虽然目前还没法支持全部命令,但可以进行一些简单的(调试)步骤和检测(命令)。

在脚本的源代码中插入一个 debugger; 声明就可以在当前位置的代码中设置一个断点。

例如,假设 myscript.js 是这么写的:

  1. // myscript.js
  2. x = 5;
  3. setTimeout(() => {
  4. debugger;
  5. console.log('world');
  6. }, 1000);
  7. console.log('hello');

一旦运行调试器,将在第4行发生断点:

  1. // myscript.js
  2. x = 5;
  3. setTimeout(() => {
  4. debugger;
  5. console.log('world');
  6. }, 1000);
  7. console.log('hello');
  8. Once the debugger is run, a breakpoint will occur at line 4:
  9. $ node debug myscript.js
  10. < debugger listening on port 5858
  11. connecting... ok
  12. break in /home/indutny/Code/git/indutny/myscript.js:1
  13. 1 x = 5;
  14. 2 setTimeout(() => {
  15. 3 debugger;
  16. debug> cont
  17. < hello
  18. break in /home/indutny/Code/git/indutny/myscript.js:3
  19. 1 x = 5;
  20. 2 setTimeout(() => {
  21. 3 debugger;
  22. 4 console.log('world');
  23. 5 }, 1000);
  24. debug> next
  25. break in /home/indutny/Code/git/indutny/myscript.js:4
  26. 2 setTimeout(() => {
  27. 3 debugger;
  28. 4 console.log('world');
  29. 5 }, 1000);
  30. 6 console.log('hello');
  31. debug> repl
  32. Press Ctrl + C to leave debug repl
  33. > x
  34. 5
  35. > 2+2
  36. 4
  37. debug> next
  38. < world
  39. break in /home/indutny/Code/git/indutny/myscript.js:5
  40. 3 debugger;
  41. 4 console.log('world');
  42. 5 }, 1000);
  43. 6 console.log('hello');
  44. 7
  45. debug> quit

repl 命令允许代码被远程评估。next 命令用于跳转到下一行。键入 help 可以查看其他的有效命令。