node.js - 为什么在不调试时定义了 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。
我不确定这是否是防弹的,但它涵盖了我的用例。
解决方案
即使您在没有显式--inspect
标志的情况下开始,也始终可以通过向进程发送 SIGUSR1 信号来临时启用检查器,如下所示:
kill -SIGUSR1 $myNodePID
因此,该属性始终设置为某些东西是有道理的debugPort
,因为它可能会很快被使用。
请参阅此处的顶部以通过句子确认这一点。
推荐阅读
- c# - 如何确定您希望使用的类的最低构建目标-VS 201
- php - Laravel(MySQL)迁移 FK 在 onDelete('CASCADE') 时有效,但在 onDelete('SET DEFAULT') 时抛出错误
- python - 当 N 很大时,均匀随机采样长度为 N 的二进制字符串
- c++ - 使用 cpp 中的结构和函数进行多个学生输入
- reactjs - 数据未使用 redux-saga 加载到 UI
- c# - 2D网络赛车游戏
- docker - 如何通过 Travis CI 将环境变量传递到 docker build 命令中
- javascript - NodeJS 发送混洗数据作为 API 响应
- swift - 斯威夫特:保持分配结束
- flutter - Flutter Application 中的 Ephemeral state 和 App state 是什么?