首页 > 解决方案 > 为什么在不调试时定义了 process.debugPort?

问题描述

我一直在探索各种方法来检测节点进程是否附加了调试器。我遇到了简单的外观process.debugPort,记录为:

process.debugPort

添加于:v0.7.2

  • <号码>

启用时 Node.js 调试器使用的端口。

文档中的“启用时”是什么意思?或者更重要的是,什么时候没有启用调试器?一个简单的测试程序表明,process.debugPort似乎总是已定义。

'use strict'

const debugPort = process.debugPort
console.log(`debugPort: ${debugPort}`)

这是一些命令行输出,显示了它在节点 v10.22.1 中的调用——我测试了节点 v15.3.0 并观察到了相同的行为。

➜  node --version
v10.22.1
➜  node nodeDebug.js 
debugPort: 9229
➜  node --inspect=0.0.0.0:9999 nodeDebug.js
Debugger listening on ws://0.0.0.0:9999/db5cdb75-4745-4ea1-9a87-3f81c811c563
For help, see: https://nodejs.org/en/docs/inspector
debugPort: 9999

因此,即使在调用没有 --inspect 标志的节点时,也会定义 debugPort(并设置为默认值 9229)。


顺便说一句,我发现检测节点是否处于调试模式的最佳方法inspector.url()

返回活动检查器的 URL,如果没有则返回 undefined。

我不确定这是否是防弹的,但它涵盖了我的用例。

标签: node.jsdebugging

解决方案


即使您在没有显式--inspect标志的情况下开始,也始终可以通过向进程发送 SIGUSR1 信号来临时启用检查器,如下所示:

kill -SIGUSR1 $myNodePID

因此,该属性始终设置为某些东西是有道理的debugPort,因为它可能会很快被使用。

请参阅此处的顶部以通过句子确认这一点。


推荐阅读