Node.js 调试大法 : v8_inspector

Node.js 调试基本原理

Node.js 提供了强大的Debugger模块,使用方式如下:

使用debug模式时,Node.js 会启动Debugger模块,然后通过监听默认 5858 端口将命令行的输入传送到内建调试模块以达到调试的目的。

同时支持--debug--debug-brk参数。这两个参数只会启动Debugger监听模式,不会进入命令行调试模式,而且前者会运行完所有代码,通常可用于事件调试,后者会在进入时中断,方便从头开始调试。 进入Debugger监听模式后,可以通过这两种方式连接调试:

node debug <URI> # 通过 URI 连接调试,如 node debug localhost:5858
node debug -p <pid> # 通过 PID 链接调试

命令行调试几乎支持所有调试的功能:断点、单步、步入、步出、变量查看等等。详细说明可参见官方文档

所以无论是IDE 调试工具还是node-inspector都是基于Node.js的Debugger模块进行调试的。

Chrome DevTools与Node.js Debugger结合

Node.js命令行调试因为缺少调试界面,因此使用的人相对比较少。于是就诞生了node-inspector。 它所做的就是让用户可以使用DevTools UI去使用原生的Debugger,使用起来也比较方便

  1. 安装node-inspectornpm install -g node-inspector
  2. 开启node-inspector服务node-inspector # node-inspector & ### Running in background
  3. debug 模式启动程序node --debug test.js # node --debug-brk test.js # Pause your script on the first line 然后就可以直接用浏览器打开http://127.0.0.1:8080/?port=5858进行调试了。

Node.js原生Debugger模块使用的是V8-Debug Protcol,而且DevTools使用Chrome Debugging Protcol。所以node-inspector在其中起到了翻译和转达的作用。

v8_inspector 诞生

今年5月份,谷歌工程师 ofrobots 提交了一个Add v8_inspector support的PR。同时在5月份的 DevTools Google I/O talk 有提到此功能。

就是说 v8_inspector 可以让 DevTools 直接连接 Node.jsDebugger进行调试。

现如今,新版本的Chrome浏览器和新版本的Node.js支持通过一个新的调试协议能互相直接通讯了,就不再需要node-inspector了。

安装新版本

  1. Node.js 6.3+ 可以从官网安装,目前给官网给到的最新版本是v6.7.0
  2. Chrome 55+ 最新版本的 Chrome 叫 Canary,安装这个版本时不用担心会覆盖老版本的Chrome,会生成另外一个图标。

启用inspect调试模式

  1. 下载好Chrome Canary后,打开chrome://flags/#enable-devtools-experiments
  2. 启用开发者工具实验性功能
  1. 重启Chrome
  2. 打开开发者工具 -> 设置 -> Experiments,按SHIFT键6次,显示隐藏选项后勾选Node debugging

使用inspect调试 使用--inspect参数就可以使用最新的调试功能:

Canary中打开链接即可调试。

使用中的问题

在用v6.7.0测试时发现一直在报错Assertion '(inspector->http_parsing_state) == (nullptr)' failed.

发现很多人有出现过这个问题,参见这里 这是一个已经修复的bug,但是v6.7.0中没有包含,解决方案就是安装v7.x版本,两种安装方式:

  1. 下载源码安装
# Install windows-build-tools
npm install --global --production windows-build-tools

# Download source code
git clone https://github.com/nodejs/node.git
cd node
git checkout remotes/origin/v7.x

# Build
# vcbuild nosign x64 # 64-bit build on windows
vcbuild nosign
  1. 下载 v7.0.0-nightly 安装包安装

使用新版本彻底解决了这个问题。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

npm 模块安装机制简介

npm 是 Node 的模块管理器,功能极其强大。它是 Node 获得成功的重要原因之一。 ? 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 。 ...

2615
来自专栏逸鹏说道

jenkins配置.net mvc网站

jenkins配置.net mvc网站 上一篇使用jenkins配置.net mvc网站进行持续集成一只是简单介绍了jenkins构建站点到本地服务器,这一篇,...

3616
来自专栏运维小白

11.7/11.8/11.9 Apache安装

安装Apache Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache Apache官网www.apache.org ...

33510
来自专栏小狼的世界

Centos下设置静态IP

使用VirtualBox装了很多虚拟机,默认采用的DHCP的方式,但是随着虚拟机越来越多以后,这种方式很不方便,所以需要将机器的IP都设置为静态IP

1306
来自专栏WebDeveloper

(centos)svn服务器与客户端的搭建

4、设置帐号密码 vi passwd 在[users]块中添加用户和密码,格式:帐号=密码,如dan=dan

1264
来自专栏happyJared

Docker + Redis 主从环境搭建

redis.conf是Redis的核心配置文件,默认docker运行的redis是不存在配置文件的,这里可以先从官网下载:

1392
来自专栏服务端技术杂谈

OAuth认证

之前写过一个基于签名的公网API访问安全控制,另一种方式是基于OAuth认证协议做安全控制。 说明 用户访问A客户端,使用B的服务及资源。B只有征得用户的授权,...

2767
来自专栏散尽浮华

tomcat相关配置技巧梳理

tomcat常用架构: 1)nginx+tomcat;即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx...

2067
来自专栏云计算教程系列

如何将Ubuntu升级到18.04最新版

Ubuntu操作系统的最新长期支持(LTS)版本Ubuntu 18.04(Bionic Beaver)于2018年4月26日发布。本教程将讲解如何将16.04或...

4306
来自专栏云计算教程系列

如何在Debian 9上安装Node.js.

Node.js是一个用于通用编程的JavaScript平台,允许用户快速构建网络应用程序。通过在前端和后端利用JavaScript,Node.js使开发更加一致...

1593

扫码关注云+社区