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 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

lnmp 环境为 phpmyadmin 目录重命名

1463
来自专栏魏艾斯博客www.vpsss.net

WinSCP-SFTP 管理传输软件安装使用教程

2524
来自专栏我和PYTHON有个约会

Django来敲门~第一部分【3. 创建第一个项目】使用自定义的8080端口来启动服务windows系统中,在命令行执行如下命令查看IP地址linux/unix系统中,在命令行执行如下命令查看IP地址

在使用django开始创建并开发项目之前,我们先简单了解一下Djaogo对于项目的管理的结构,这里要提出的是,Django之所以可以方便快捷的开发大型WEB应用...

671
来自专栏惨绿少年

FPM定制RPM包实践

1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案。 解答: 1.tar 打包 先编译安装 打...

2440
来自专栏王磊的博客

简单的小工具wordlight——让VS变量高亮起来

前段时间一直在使用matlab,今天需要使用vs2008,而用惯了matlab,习惯了其中一项选中变量高亮的设置,突然回来使用VS,感到各种不适应,顿时想到了一...

3436
来自专栏微服务生态

跟着小程一起聊聊GIT那点事

同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了...

952
来自专栏Java后端技术

用Maven快速生成带有依赖的可执行jar包

  最近项目在做微服务的拆分,那么我们想让我们的容器启动更加的轻量级,所以我们选择放弃tomcat等容器,而是通过maven生成带有指定依赖的可执行jar包的方...

494
来自专栏编程坑太多

『中级篇』windows下vagrant 通过SecureCRT连接centos7(33)

PS:我入了这个坑,找了好久才找到解决方案,一开始用SecureCRT 老提示public key,不知道该怎么办,查看了目录了解到了vagrant ssh的时...

401
来自专栏晋中望的专栏

RN 框架工程相关指南

本文主要介绍了 RN 框架工程相关指南。框架内容主要为四个部分:app、ReactAndroid 、ReactCommon和jsbundle。

5600
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十九天 Linux学习【悟空教程】

UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。不过UNIX有免费版的,例如:NetBSD等类似UNIX版本。

1164

扫码关注云+社区