node.js之调试器

1.在命令行窗口中,可以使用"node debug" 命令来启用调试器,代码如下:

  1. node debug<需要被执行的脚本文件名>

接下来根据一个实例进行学习调试过程:

编写app.js文件进行调试:

  1. console.log('hello,word')
  2. function foo(){
  3. console.log('hello,foo')
  4. return 100;
  5. }
  6. var bar = 'This is a pen';
  7. var http = require('http')
  8. var i = foo();
  9. console.log(i)

1 在命令行窗口使用"node debug"命令,结果如下所示:

  1. [root@kuber2 webproject]# node debug app.js
  2. < Debugger listening on [::]:5858
  3. connecting to 127.0.0.1:5858 ... ok
  4. break in app.js:1
  5. > 1 console.log('hello,word')
  6. 2 function foo(){
  7. 3 console.log('hello,foo')
  8. debug>

在Node.js中提供了一个可以通过简单TCP协议来访问的调试器,进入调试后,首先连接调试器,如上图所示出现Debugger并后面跟有ok,说明调试器已经成功使用。"break in app.js:1" 表示脚本程序暂停的位置

2继续执行可输入"cont"或"c",继续执行剩余的代码,结果如下所示:

  1. [root@kuber2 webproject]# node debug app.js
  2. < Debugger listening on [::]:5858
  3. connecting to 127.0.0.1:5858 ... ok
  4. break in app.js:1
  5. > 1 console.log('hello,word')
  6. 2 function foo(){
  7. 3 console.log('hello,foo')
  8. debug> c
  9. < hello,word
  10. < hello,foo
  11. < 100

3如果不需要执行剩余的所有脚本代码,输入"next"或"n"将程序执行到下一句可执行代码前,如下所示:

  1. [root@kuber2 webproject]# node debug app.js
  2. < Debugger listening on [::]:5858
  3. connecting to 127.0.0.1:5858 ... ok
  4. break in app.js:1
  5. > 1 console.log('hello,word')
  6. 2 function foo(){
  7. 3 console.log('hello,foo')
  8. debug> n
  9. < hello,word
  10. break in app.js:6
  11. 4 return 100;
  12. 5 }
  13. > 6 var bar = 'This is a pen';
  14. 7 var http = require('http')
  15. 8 var i = foo();
  16. debug>

4如果想进入函数进行调试,可以在函数被调用出输入命令"step"或"s",进入函数体,如图所示:

  1. break in app.js:8
  2. 6 var bar = 'This is a pen';
  3. 7 var http = require('http')
  4. > 8 var i = foo();
  5. 9 console.log(i)
  6. 10
  7. debug> s
  8. break in app.js:3
  9. 1 console.log('hello,word')
  10. 2 function foo(){
  11. > 3 console.log('hello,foo')
  12. 4 return 100;
  13. 5 }
  14. debug>

5在函数体中可以用"n",逐步进行调试,还可输入"out"或"o" 立即执行完函数内所有代码,程序将暂停到被调用函数代码后的一句代码前,如图所示:

  1. break in app.js:3
  2. 1 console.log('hello,word')
  3. 2 function foo(){
  4. > 3 console.log('hello,foo')
  5. 4 return 100;
  6. 5 }
  7. debug> n
  8. < hello,foo
  9. break in app.js:4
  10. 2 function foo(){
  11. 3 console.log('hello,foo')
  12. > 4 return 100;
  13. 5 }
  14. 6 var bar = 'This is a pen';
  15. debug> o
  16. break in app.js:9
  17. 7 var http = require('http')
  18. 8 var i = foo();
  19. > 9 console.log(i)
  20. 10
  21. 11 });
  22. debug>

6 利用watch可以观察变量或一些表达式的值,利用unwatch可以取消观看,具体应用如下代码所示:

  1. break in app.js:1
  2. > 1 console.log('hello,word')
  3. 2 function foo(){
  4. 3 console.log('hello,foo')
  5. debug> watch("i")
  6. debug> watch("i==100")
  7. debug> n
  8. < hello,word
  9. break in app.js:6
  10. Watchers:
  11. 0: i = undefined
  12. 1: i==100 = false
  13. 4 return 100;
  14. 5 }
  15. > 6 var bar = 'This is a pen';
  16. 7 var http = require('http')
  17. 8 var i = foo();
  18. debug> n
  19. break in app.js:7
  20. Watchers:
  21. 0: i = undefined
  22. 1: i==100 = false
  23. 5 }
  24. 6 var bar = 'This is a pen';
  25. > 7 var http = require('http')
  26. 8 var i = foo();
  27. 9 console.log(i)
  28. debug> n
  29. break in app.js:8
  30. Watchers:
  31. 0: i = undefined
  32. 1: i==100 = false
  33. 6 var bar = 'This is a pen';
  34. 7 var http = require('http')
  35. > 8 var i = foo();
  36. 9 console.log(i)
  37. 10
  38. debug> n
  39. < hello,foo
  40. break in app.js:9
  41. Watchers:
  42. 0: i = 100
  43. 1: i==100 = true
  44. 7 var http = require('http')
  45. 8 var i = foo();
  46. > 9 console.log(i)
  47. 10
  48. 11 });
  49. debug> unwatch("i")
  50. debug> unwatch("i==100")
  51. debug> n
  52. < 100
  53. break in app.js:11
  54. 9 console.log(i)
  55. 10
  56. >11 });
  57. debug>

7可以利用setBreakpoint(filename,line)或cb(filename,line),设置断点,第一个参数为设置断点的文件名,不填默认为i正在运行的文件,line为需要加断点的行号;可以利用clearBreakPoint(filename,line)或cb(filename,line)取消断点

8使用list(n)可以显示所调试语句的前几后与后几行代码

9使用repl可以特推出debug模式

10使用restart可以重新开始文本调试

11 使用kill终止脚本文件调试

12利用kill终止文本调试后可利用run重新开始

13利用backtrace或bt可以返回运行代码的所处位置

14利用script可以查看所有被加载的模块名称

node.js之调试器的更多相关文章

  1. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

  2. Node.js包管理器:

    Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...

  3. Node.js 种子下载器

    Node.js 种子下载器 庆祝 2018 国庆,制作了一个 Node.js 的种子下载器.爬取页面,根据页面的链接,破解另外一个网站,下载种子文件.项目比较简单,爬取页面没有使用任何爬虫框架.项目源 ...

  4. node.js启动调试方式

    node.js启动调试方式(nodeJs不能像js一样在控制台调试) 以express项目为例,启动路径是localhost:3000 一.通过node命令启动 node server/bin/www ...

  5. node.js 远程调试debug产线环境代码

    一.背景: 产线机器出bug,不能重启服务,需要保留现场,问题不好排查,只能靠远程debug. 二.实现步骤 1. 登录远程机器执行如下命令,nodePid为node服务的pid kill -usr1 ...

  6. npm --- Node.js包管理器

    目录 1. 安装Node.js 2. 运行npm 3. npm介绍 3.1 安装插件 3.2 更新插件 3.3 卸载插件 3.4 查看当前目录中的插件列表 4. 使用cnpm 4.1 安装 npm( ...

  7. 【Node.js】Node.js的调试

    目录结构: contents structure [-] 使用console.log() 使用Chrome DevTools 使用Visual Studio Code 与JavaScript运行在浏览 ...

  8. Node.js 包管理器 NPM 讲解

    包管理器又称软件包管理系统,它是在电脑中自动安装.配制.卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用.对于我们业务开发也很受益,相同的东西不必重复去造轮子. 每个工具或 ...

  9. 9.Node.js 包管理器npm

    npm 是 Node.js  官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...

随机推荐

  1. Swift3 GCD队列优先级说明

    从ios8开始,苹果引入了一个新的概念 QoS(quality of service),用于指定GCD队列的优先级. swift3之前:只有4个优先级 high > default > l ...

  2. 【JAVA】配置JAVA环境变量

    系统变量新建,添加 变量名JAVA_HOME 变量值为C:\Java\jdk版本号 修改 Path为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  3. JavaWeb 后端 <八> 之 JDBC基礎(全)

    一.JDBC简介 1.JDBC是SUN公司为了简化操作数据推出一套规范.数据库厂商的驱动就是对JDBC的实现. 2.Java Data Base Connectivity(java数据库连接),它主要 ...

  4. rang enumerate

    叨逼叨: 小知识点 rang enumerate # 1. 请输出1-10# 2.7: 立即生成所有数字# range(1,11) # 生成 1,23,,4,56.10# 3.x: 不会立即生成,只有 ...

  5. 【Vue】详解Vue生命周期

    Vue实例的生命周期全过程(图) (这里的红边圆角矩形内的都是对应的Vue实例的钩子函数) 在beforeCreate和created钩子函数间的生命周期 在beforeCreate和created之 ...

  6. WNMP(Windows + Nginx + PHP + MySQL) 安装

    最近在开发一个新的项目,环境用的是: Nginx1.10.3  下载地址: http://nginx.org/en/download.html  下载windows版本包 PHP 7.1.1  下载地 ...

  7. MongoDB入门解析【学习记录】

    刚开始学习mongodb,对笔记做了一个整理.是基于nodejs来学习的. 1.mongodb介绍 mongodb 是C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添 ...

  8. 【NOIP模拟】Grid(字符串哈希)

    题目背景 SOURCE:NOIP2016-RZZ-1 T3 题目描述 有一个 2×N 的矩阵,矩阵的每个位置上都是一个英文小写字符. 现在需要从某一个位置开始,每次可以移动到一个没有到过的相邻位置,即 ...

  9. (转)每天一个linux命令(27):linux chmod命令

    场景:在项目部署过程中经常需要给不同目录授权! 1 简介 chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设 ...

  10. (转)java中对集合对象list的几种循环访问总结

    Java集合的Stack.Queue.Map的遍历   在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...