网易首页 > 网易号 > 正文 申请入驻

nodejs的调试debug

0
分享至

简介

对于开发者来说,在开发应用程序的过程中,往往为了开发方便和解决bug需要借助于编程语言的调试功能。一般来说我们需要借助于强大IDE的调试功能来完成这项工作。nodejs也不例外。

今天我们来详细介绍一下如何调试nodejs程序。

开启nodejs的调试

还记得之前我们讲到的koa程序吗?本文将会以一个简单的koa服务端程序为例,来展开nodejs的调试。

先看下一个简单的koa服务app.js:

const Koa = require('koa');
const app = module.exports = new Koa();

app.use(async function(ctx) {
ctx.body = 'Hello World';
});

if (!module.parent) app.listen(3000);

上面的程序开启了3000端口,建立了一个http服务。每次请求的时候,都会返回hello World,非常的简单。

要想运行上面的程序,我们需要执行node app.js。这会执行app.js但是并不会开启调试功能。

怎么进行调试呢?

我们需要加上 –inspect 参数:

node --inspect app.js

上面的代码将会开启nodejs的调试功能。

我们看下输出结果:

Debugger listening on ws://127.0.0.1:9229/88c23ae3-9081-41cd-98b0-d0f7ebceab5a
For help, see: https://nodejs.org/en/docs/inspector

结果告诉了我们两件事情,第一件事情就是debugger监听的端口。默认情况下将会开启127.0.0.1的9229端口。并且分配了一个唯一的UUID以供区分。

第二件事情就是告诉我们nodejs使用的调试器是Inspector。

Inspector是nodejs 8之后引入的,如果是在nodejs 7之前,那么使用的是legacy debugger。

调试的安全性

如果debugger连接到了nodejs运行环境中,如果有恶意攻击者的话,这个恶意攻击者可以在nodejs环境中运行任意代码。这会给我们的程序带来很大的安全隐患。

所以我们一定要注意调试的安全性。一般来说,我们不建议进行远程调试。

默认情况下 –inspect 绑定的是127.0.0.1,这样就只允许本地程序访问。并且任何本地运行的程序都有权限进行该程序的调试。

如果我们真的想将debug程序暴露给外部程序的话,那么可以指明本机的外网IP地址或者0.0.0.0(表示任何地址,无限制),这样远程机子就可以进行远程调试了。

如果我们想进行安全的remote debug该怎么处理呢?

首先,我们要开启本地的debug:

node --inspect app.js

然后我们可以搭建一个ssh隧道,将本地的9221端口映射到远程服务器的9229端口:

ssh -L 9221:localhost:9229 user@remote.example.com

这样我们就可以通过连接本地的9221端口,进行远程调试了。

使用WebStorm进行nodejs调试

JetBrains出品的WebStorm可谓是开发nodejs的利器,WebStorm自带有debug选项,如果开启该选项,则会在后台开启 –inspect:

使用WebStorm来进行调试和使用IDEA来进行java程序调试类似,这里就不多介绍了。

使用Chrome devTools进行调试

使用Chrome devTools进行调试的前提是我们已经开启了 –inspect模式。

在chrome中输入chrome://inspect:

我们可看到chrome inspect的界面,如果你本地已经有开启inspect的nodejs程序的话,在Remote Target中就可以直接看到。

选中你要调试的target,点击inspect,即可开启Chrome devTools调试工具:

你可以对程序进行profile,也可以进行调试。

这里我们关注的是调试,所以转到source一栏,添加你要调试的程序的源代码:

加入断点即可开始调试了。和在chrome中调试web端的js是一样的。

使用node-inspect来进行调试

其实nodejs有一个自带的调试工具,叫做node-inspect,这是一个cli的调试工具。我们看一下怎么使用。

我们直接使用:

node inspect app.js

< Debugger listening on ws://127.0.0.1:9229/f1c64736-47a1-42c9-9e9e-f2665073d3eb
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in app.js:1
> 1 const Koa = require('koa');
2 const app = module.exports = new Koa();
3
debug>

node inspect 做了两件事情,第一件事情就是生成子程序去运行node –inspect app.js,第二件事情就是在主程序中运行CLI调试窗口。

这个CLI调试程序为我们提供了一些非常有用的命令:

  1. Stepping

  • cont, c: 继续执行

  • next, n: Step到下一步

  • step, s: Step in

  • out, o: Step out

  • pause: 暂停运行的代码

  1. Breakpoints

  • setBreakpoint(), sb(): 在当前行设置断点

  • setBreakpoint(line), sb(line): 在指定的行设置断点

  • setBreakpoint(‘fn()’), sb(…): 在指定的function中设置断点

  • setBreakpoint(‘script.js’, 1), sb(…): 在指定的脚本文件中设置断点

  • clearBreakpoint(‘script.js’, 1), cb(…): 从文件中清除断点

  1. Information

  • backtrace, bt: 打印当前execution frame的backtrace信息

  • list(5): 列出源代码前后的5行

  • watch(expr): 添加监听表达式

  • unwatch(expr): 删除监听表达式

  • watchers: 列出所有的watchers

  • repl: 打开repl表达式

  • exec expr: 执行表达式

通过上面的命令,我们可以在CLI中进行比较复杂的调试活动。

其他的debug客户端

除了上面我们讲到的几个之外,我们还可以使用vscode,Visual Studio ,Eclipse IDE 等来进行nodejs的调试,这里就不一一详细介绍了。

感兴趣的朋友可以自行探索。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“点都德”老字号的迷局,为什么老广州不买账?四点原因说真相

“点都德”老字号的迷局,为什么老广州不买账?四点原因说真相

珊姐姐
2026-01-21 10:02:01
不查不知道一查吓一跳,坐拥北京60亩马场的于谦,私下到底有多壕

不查不知道一查吓一跳,坐拥北京60亩马场的于谦,私下到底有多壕

小熊侃史
2026-01-20 07:40:05
第一个拒绝加入特朗普“和平委员会”的总统来了!中国也收到邀请

第一个拒绝加入特朗普“和平委员会”的总统来了!中国也收到邀请

现代小青青慕慕
2026-01-21 11:36:45
英媒:伊朗抗议活动造成1.6万人死亡,33万人受伤,堪比种族灭绝

英媒:伊朗抗议活动造成1.6万人死亡,33万人受伤,堪比种族灭绝

史政先锋
2026-01-19 22:38:36
格陵兰岛总理表态

格陵兰岛总理表态

新京报政事儿
2026-01-20 22:07:59
为应对“超短学期”,上海、江苏等多地中小学“提前教学”下学期内容,家长:接受并支持“提前学”

为应对“超短学期”,上海、江苏等多地中小学“提前教学”下学期内容,家长:接受并支持“提前学”

鲁中晨报
2026-01-21 17:27:05
美政府首次回应“斩杀线”

美政府首次回应“斩杀线”

新京报政事儿
2026-01-21 00:16:19
李亚鹏房东最新言论炸懵全网,一切都反转了!

李亚鹏房东最新言论炸懵全网,一切都反转了!

互联网品牌官
2026-01-20 14:56:01
著名京剧演员孙彩虹逝世,曾参演并担任87版《红楼梦》剧务

著名京剧演员孙彩虹逝世,曾参演并担任87版《红楼梦》剧务

澎湃新闻
2026-01-21 15:55:20
你身边有把一手好牌打的稀烂的人吗?网友:都是上辈子欠人家的

你身边有把一手好牌打的稀烂的人吗?网友:都是上辈子欠人家的

带你感受人间冷暖
2026-01-21 00:15:05
中央委员辞去省人大常委会主任职务,还有三人辞去副省长职务

中央委员辞去省人大常委会主任职务,还有三人辞去副省长职务

上观新闻
2026-01-21 11:54:06
“小姐姐牵绳遛狗被一家人围殴,邻居帮忙作证也被打伤!打人男子还扬言要杀狗…”警方调取监控,已立案

“小姐姐牵绳遛狗被一家人围殴,邻居帮忙作证也被打伤!打人男子还扬言要杀狗…”警方调取监控,已立案

大风新闻
2026-01-21 17:36:04
1989年天津男子捡到女乞丐为妻,21年后警方找上门,发现妻子身份

1989年天津男子捡到女乞丐为妻,21年后警方找上门,发现妻子身份

我是玲玲
2024-11-16 14:36:28
委内瑞拉称已从美国主导的原油销售中入账首笔3亿美元款项

委内瑞拉称已从美国主导的原油销售中入账首笔3亿美元款项

界面新闻
2026-01-21 08:46:40
国内媒体:向余望打进关键一球,其父亲喝酒庆祝到早上

国内媒体:向余望打进关键一球,其父亲喝酒庆祝到早上

懂球帝
2026-01-21 16:30:14
共拓新境,见证2025体育产业的27个榜样

共拓新境,见证2025体育产业的27个榜样

懒熊体育
2026-01-09 21:30:06
女性正在进山,品牌如何跟上?

女性正在进山,品牌如何跟上?

懒熊体育
2025-06-30 10:04:46
商业航天“牛股”突发!终止收购!

商业航天“牛股”突发!终止收购!

每日经济新闻
2026-01-19 21:55:28
人民日报三评西贝关店事件,基本宣告断掉罗永浩今后生路!

人民日报三评西贝关店事件,基本宣告断掉罗永浩今后生路!

玖宇维
2026-01-20 21:52:53
让“吹哨人”敢吹哨!谨以此文致敬罗永浩

让“吹哨人”敢吹哨!谨以此文致敬罗永浩

社会日日鲜
2026-01-21 09:17:54
2026-01-21 18:44:49
flydean程序那些事
flydean程序那些事
最通俗的解读,最深刻的干货!
356文章数 438关注度
往期回顾 全部

科技要闻

给机器人做仿真训练 这家创企年营收破亿

头条要闻

欧盟被指有意将中企排除出欧洲移动通信网络 中方回应

头条要闻

欧盟被指有意将中企排除出欧洲移动通信网络 中方回应

体育要闻

只会防守反击?不好意思,我们要踢决赛了

娱乐要闻

李亚鹏2天获1291万网友力挺

财经要闻

西贝估值100亿?最新融资约13亿元

汽车要闻

2026款上汽大众朗逸正式上市 售价12.09万起

态度原创

本地
时尚
艺术
房产
健康

本地新闻

云游辽宁|漫步千年小城晨昏,“康”复好心情

告别93岁时尚传奇Valentino:他留下了全世界最美的“红”

艺术要闻

一百多年前的中国,太雄伟震撼了!

房产要闻

那个砸下400亿的绿地,又要杀回海南了!

打工人年终总结!健康通关=赢麻了

无障碍浏览 进入关怀版