VS Code Node.js 调试器的 launch.json 配置详解:
launch.json 文件用于配置 VS Code 的调试器。当我们想要使用 VS Code 来调试一个 Node.js 应用程序时,我们需要设置以下内容:
一个调试配置对象。
配置对象的类型必须是 node。
配置对象的请求类型必须是 launch,表示我们要启动一个新的程序来进行调试。
指定 Node.js 应用程序的入口文件。
允许我们配置其他选项,例如调试器的工作目录,环境变量,参数等等。
下面是一个示例 launch.json 文件:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Server",
"program": "${workspaceFolder}/index.js",
"args": [],
"cwd": "${workspaceFolder}",
"runtimeExecutable": "node",
"runtimeArgs": [
"--inspect-brk=9229"
],
"env": {
"NODE_ENV": "development"
},
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"skipFiles": [
"<node_internals>/**"
]
}
]
}
现在我们来逐个解释上述示例中的每一个属性和选项:
"version": "0.2.0"
这个属性指定了调试配置文件的版本。我们使用的是当前版本 "0.2.0"。
"configurations": [...]
这个属性指定了我们的所有调试配置对象的数组。
"type": "node"
这个属性指定了调试器的类型,我们使用的是 Node.js 调试器。
"request": "launch"
这个属性指定了调试请求的类型,我们使用的是 launch。
"name": "Debug Server"
这个属性指定了我们的调试配置对象的名称。
"program": "${workspaceFolder}/index.js"
这个属性指定了我们的 Node.js 应用程序的入口文件路径。
"args": []
这个属性可以指定要传递给 Node.js 应用程序的命令行参数。在本例中,我们没有传递任何参数,所以这个属性值是一个空数组。
"cwd": "${workspaceFolder}"
这个属性指定了 Node.js 应用程序的工作目录。在本例中,我们使用 ${workspaceFolder} 指定了当前 VS Code 工作区的根目录。
"runtimeExecutable": "node"
这个属性指定了要使用的 Node.js 运行时。在本例中,我们使用默认的 Node.js 运行时。
"runtimeArgs": ["--inspect-brk=9229"]
这个属性指定了要传递给 Node.js 运行时的命令行参数。在本例中,我们指定了 --inspect-brk=9229,这意味着 Node.js 应用程序会在调试器连接到调试端口 9229时暂停执行。这样我们就可以在 VS Code 中连接到 Node.js 应用程序并开始调试了。
"env": { "NODE_ENV": "development" }
这个属性可以指定要设置的环境变量。在本例中,我们指定了 NODE_ENV 环境变量的值为 "development"。
"console": "integratedTerminal"
这个属性指定了调试器输出的位置。在本例中,我们将输出发送到 VS Code 的集成终端。
"internalConsoleOptions": "neverOpen"
这个属性指定了调试器内部控制台的选项。在本例中,我们将选项设置为 "neverOpen",这意味着当我们启动调试器时,VS Code 不会打开控制台。
"skipFiles": ["<node_internals>/**"]
这个属性指定了调试器应该跳过的文件或目录。在本例中,我们指定了跳过 Node.js 内部的文件或目录。这样,调试器就不会停在这些文件或目录中的任何断点上。
好的,现在我们来详细说明一下如何使用这个示例 launch.json 文件来调试一个 Node.js 应用程序。假设我们有以下的 Node.js 应用程序:
const http = require("http");
const hostname = "localhost";
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello World\n");
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
这是一个简单的 Node.js HTTP 服务器,它会监听端口 3000 并返回 "Hello World"。
为了在 VS Code 中调试这个应用程序,我们需要执行以下步骤:
打开 VS Code 并打开应用程序的工作目录。
创建一个名为 .vscode 的子目录(如果它不存在)。
在 .vscode 目录中创建一个名为 launch.json 的文件,并将上述示例 launch.json 文件的内容复制到该文件中。
将 program 属性的值更改为您的应用程序的入口文件路径。在本例中,我们需要将 "program": "${workspaceFolder}/index.js" 更改为 "program": "${workspaceFolder}/app.js",因为我们的应用程序的入口文件名为 app.js。
确保您的应用程序不在运行状态。
按下 F5 键或选择 VS Code 菜单中的 "Run > Start Debugging"。
这样,VS Code 就会使用示例 launch.json 文件中的配置来启动您的应用程序,并将其连接到调试器。您现在可以使用 VS Code 中的调试工具来设置断点,查看变量值,单步执行等等。
当您在 VS Code 中调试 Node.js 应用程序时,您可以使用许多不同的调试功能。
以下是一些常用的调试功能:
断点
断点是调试器中最基本的功能之一。您可以在应用程序的代码中设置断点,然后当应用程序执行到断点时,调试器会暂停应用程序的执行,以便您可以查看应用程序的状态、变量值等等。在 VS Code 中,您可以单击编辑器的左侧边栏来设置断点。
监视
监视是一种查看变量值的方法。在 VS Code 中,您可以在调试器中使用监视面板来监视变量。您可以添加变量到监视面板中,并在应用程序暂停时查看其值。监视功能非常有用,因为它允许您跟踪应用程序中的变量,并查看它们的值在不同的时间点上是如何变化的。
单步执行
单步执行是一种在调试器中逐步执行代码的方法。在 VS Code 中,您可以使用单步执行来逐行执行应用程序的代码,并在每行代码执行完毕后暂停应用程序的执行。单步执行功能非常有用,因为它允许您查看代码在执行时发生了什么,并查看变量的值在代码执行过程中如何变化。
调用堆栈
调用堆栈是一种查看应用程序的调用层次结构的方法。在 VS Code 中,您可以使用调用堆栈面板来查看应用程序的调用堆栈,并了解应用程序中哪些函数正在执行以及它们是如何被调用的。调用堆栈功能非常有用,因为它允许您了解应用程序的结构,并帮助您找到应用程序中的 bug。
以上是一些常用的调试功能。在 VS Code 中,您还可以使用其他功能来调试应用程序,如条件断点、断点日志等等。如果您想了解更多信息,请参考 VS Code 的文档。