第 3 章 调试基于 Node.js 的应用
本节介绍调试基于 Node.js 的应用,以及在本地和远程部署中使用调试日志记录。
3.1. 远程调试 复制链接链接已复制到粘贴板!
要远程调试应用,您需要在调试模式中启动它,并为它附加一个调试器。
3.1.1. 在本地启动应用程序并附加原生调试器 复制链接链接已复制到粘贴板!
原生调试器允许您使用内置调试客户端调试基于 Node.js 的应用。
先决条件
- 要调试的应用程序。
步骤
在启用了 debugger 的情况下启动应用。
原生调试器会自动附加,并提供调试提示。
启用 debugger 的示例应用
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的应用程序具有不同的入口点,则需要更改命令以指定该入口点:
node inspect path/to/entrypoint
$ node inspect path/to/entrypoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,当使用 express 生成器 创建应用程序时,入口点默认设置为
./bin/www
。- 使用调试器提示执行 调试命令。
3.1.2. 在本地启动应用程序并附加 V8 检查器 复制链接链接已复制到粘贴板!
V8 检查器允许您使用 Chrome DevTools 等其他工具(如 Chrome DevTools )调试基于 Node.js 的应用,该工具使用 Chrome 调试协议。
先决条件
- 要调试的应用程序。
- 安装了 V8 检查器,如 Google Chrome Browser 中提供的检查器。
步骤
在启用了 V8 检查器集成的情况下启动 您的应用程序。
node --inspect app.js
$ node --inspect app.js
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的应用程序具有不同的入口点,则需要更改命令以指定该入口点:
node --inspect path/to/entrypoint
$ node --inspect path/to/entrypoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,当使用 express 生成器 创建应用程序时,入口点默认设置为
./bin/www
。附加 V8 检查器并执行调试命令。
例如,如果使用 Google Chrome:
-
导航到
chrome://inspect
。 - 从以下 Remote Target 中选择您的应用程序。
- 现在,您可以看到应用程序的源,并可执行调试操作。
-
导航到
3.1.3. 以调试模式在 OpenShift 上启动应用程序 复制链接链接已复制到粘贴板!
要在 OpenShift 上远程调试基于 Node.js 的应用程序,您必须将容器内的 NODE_ENV
环境变量设置为 development
并配置端口转发,以便您可以从远程调试器连接到应用程序。
先决条件
- 您的应用程序在 OpenShift 上运行。
-
安装了
oc
二进制文件。 -
在目标 OpenShift 环境中执行
oc port-forward
命令的功能。
步骤
使用
oc
命令,列出可用的部署配置:oc get dc
$ oc get dc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将应用程序的部署配置中的
NODE_ENV
环境变量设置为development
来启用调试。例如:oc set env dc/MY_APP_NAME NODE_ENV=development
$ oc set env dc/MY_APP_NAME NODE_ENV=development
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果应用程序没有设置为在配置更改时自动重新部署,请重新部署它。例如:
oc rollout latest dc/MY_APP_NAME
$ oc rollout latest dc/MY_APP_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置从本地机器到应用程序 pod 的端口转发:
列出当前运行的 pod 并找到包含应用程序的 pod:
oc get pod
$ oc get pod NAME READY STATUS RESTARTS AGE MY_APP_NAME-3-1xrsp 0/1 Running 0 6s ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置端口转发:
oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5858
$ oc port-forward MY_APP_NAME-3-1xrsp $LOCAL_PORT_NUMBER:5858
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这里,
$LOCAL_PORT_NUMBER
是您的本地机器上您选择的未使用端口号。记住远程调试器配置的这一数字。
附加 V8 检查器并执行调试命令。
例如,如果使用 Google Chrome:
-
导航到
chrome://inspect
。 - 单击 配置。
-
添加
127.0.0.1:$LOCAL_PORT_NUMBER
. - 点 Done。
- 从以下 Remote Target 中选择您的应用程序。
- 现在,您可以看到应用程序的源,并可执行调试操作。
-
导航到
完成调试后,在应用程序 pod 中取消设置
NODE_ENV
环境变量。例如:oc set env dc/MY_APP_NAME NODE_ENV-
$ oc set env dc/MY_APP_NAME NODE_ENV-
Copy to Clipboard Copied! Toggle word wrap Toggle overflow