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