调试代码要有这么几个工具:源代码、带调试符号的程序、MAP表,调试器。
在启动调试器之前,要首先编译带有符号表的程序,生成对应map。然后启动调试器。
不同的语言有不同的特性,比如解释型语言不需要编译成可执行程序。因此不同语言调试的具体方法不同。
vscode作为通用IDE,为了弥合不同语言之间的调试差异,采用了声明式配置。用户只需要告诉vscode使用什么调试器,调试哪个程序,源代码在哪里,就能对程序进行调试。所有这些信息都保存在 .vscode/launch.json
文件中。
最核心的参数有以下几个
参数 | 示例 | 说明 |
---|---|---|
type |
node、debugpy、chrome等 | 指定调试器类型 |
request |
launch、attach | lanuch 新启动一个程序进程进行调试;attach 是把vscode作为调试器客户端,连接到远端调试服务器(远程调试) |
其他公共配置-(request: "launch
)
参数 | 说明 |
---|---|
name |
配置名称(显示在调试下拉列表中) |
program |
入口文件路径(如 ${workspaceFolder}/src/main.ts ) |
runtimeExecutable |
指定运行时(如 npm, node) |
runtimeArgs |
传递给运行时的参数 |
args |
传递给程序的参数 |
env |
环境变量 |
cwd |
工作目录 |
console |
控制台类型。internalConsole : VS Code 内置控制台;integratedTerminal : 集成终端;externalTerminal : 外部终端 |
在调试js程序时,如果制定了运行时是npm
,则可以不指定program
.
例如:
{
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "debug"],
"skipFiles": ["<node_internals>/**"],
"console": "integratedTerminal",
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
其他公共配置-(request: "attach
)
参数 | 说明 |
---|---|
port |
要附加的调试端口(通常 9229) |
address |
IP 地址(默认 “localhost”) |
localRoot |
本地工作区根目录 |
remoteRoot |
远程工作区根目录(用于远程调试) |
其他公共配置-源代码映射:
参数 | 说明 |
---|---|
outFiles |
编译输出文件的 glob 模式(如 “${workspaceFolder}/dist/**/*.js”) |
sourceMaps |
是否使用 source map(默认 true) |
preLaunchTask |
调试前执行的任务(如编译任务) |
其他公共配置:
参数 | 说明 |
---|---|
skipFiles |
跳过调试的文件(如 ["<node_internals>/**"] ) |
restart |
是否在终止时重启 |
stopOnEntry |
启动时是否在入口暂停。当为true 时,一旦进入调试状态,程序会自动hang住,等待用户点击“继续”才会继续执行。相当于自动加了一个断点 |