前言
接上面一篇 轻松玩转vscode中Debugger调试之后, 仅说明了常规debugger的一些方式和概念。
如何通过vscode调试其他语言,我们进一步尝试。
接下来主要介绍下以下语言的调试过程:
- 调试ts
- 调试c/c++
- 调试python
- 调试rust
接下来所有的配置都是默认已经安装对应语言的环境,具体自行安装。
对应的调试插件可以在插件市场找到,链接: vscode应用市场调试相关插件。
1. 调试ts
VSCode内置的 Node.js 调试器以及 Edge 和 Chrome 调试器支持 TypeScript 调试。
ts调试介绍两种:
- tsc
- ts-node
1.1 tsc
要使用tsc进行调试,必须要TypeScript 文件生成map文件,使用 --sourcemap
选项进行编译,或将 tsconfig.json
文件中的 sourceMap
属性设置为 true
。这样才能开启调试。
具体步骤如下:
- 新建一个index.ts文件,使用
tsc --init
生成tsconfig.json
文件。
index.ts:
let a:number = 5;
let b:number = 10;
let c:number = 15;
tsconfig.json:
{
"compilerOptions": {
"target": "ES5",
"module": "CommonJS",
"outDir": "out",
"sourceMap": true
}
}
- 运行
tsc
,tsc
是typescript自带的命令工具,会编译所有文件,分别对应生成js文件和js.map映射文件。
注意:如果不生成文件,直接调试是不会启动的
- 通过
F5
或者侧边栏点击Run and Debug
即可运行调试ts文件。
那么有没有方式可以直接执行ts文件进行调试,答案是有的。
1.2 ts-node
ts-node
用于 node.js 的 TypeScript 执行和 REPL,具有源映射和本机 ESM 支持。简单说就是可以直接使用ts-node
命令直接运行ts文件。不需要修改tsconfig.json,也不用执行生成map文件。
具体步骤:
- 使用
npm i -g ts-node
安装 - 终端中运行
ts-node index.ts
1.3 使用launch.json文件进行设置调试
那如果我非要使用tsc
进行一键调试呢?那我们可以通过launch.json文件的设置达到,
创建默认:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.ts",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}
因为使用tsc
调试ts类型文件,需要生成js和map文件,所以就需要在configurations
中添加preLaunchTask
,这项配置是在启动调试前执行,告知调试器在何处查找生成的 JavaScript 文件。
"preLaunchTask": "tsc: build - tsconfig.json",
如果生成的(转译)JavaScript 文件不位于其源文件旁边,可以通过在启动配置中设置 outFiles
属性定义。每当在原始源中设置断点时,VS Code 都会尝试通过搜索 outFiles
中的 glob 模式指定的文件来查找生成的源文件。
最后,可以直接通过侧边栏调式Run and Debug
直接启动。
2. 调试c/c++
要进行c/c++调试,具体步骤如下:
- 安装插件
- 创建launch.json
- 2.1 点击生成launch.json文件
默认生成:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/path/to/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
需要进行修改为:
launch.json具体内容修改如下:
//该文件用于配置调试器,描述如何运行和调试 C/C++ 程序。
{
"configurations": [
{
// 配置名称,用于在调试器中选择
"name": "C/C++ debug",
// 指定调试器类型,cppdbg 表示使用 C/C++ 调试器扩展
"type": "cppdbg",
// 调试模式。launch 表示启动新程序进行调试,attach 用于附加到已有进程
"request": "launch",
// 被调试程序的路径,${fileDirname} 是当前文件目录,${fileBasenameNoExtension} 是当前文件名(不含扩展名)
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
// 传递给程序的命令行参数,空数组表示不传递任何参数
"args": [],
// 是否在程序入口处暂停。false 表示直接运行到第一个断点
"stopAtEntry": false,
// 调试时的工作目录,通常设置为程序所在目录
"cwd": "${fileDirname}",
// 传递给调试进程的环境变量,数组为空表示使用默认环境变量
"environment": [],
// 是否在外部控制台显示调试信息。false 表示使用内置终端
"externalConsole": false,
// 指定使用的调试器协议。gdb 表示使用 GNU 调试器
"MIMode": "gdb",
// gdb的安装路径,根据自身安装路径配置
"miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",
// 调试器启动时执行的命令
"setupCommands": [
// 启用变量的友好显示格式
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
// 如果命令失败是否继续运行,true 表示忽略错误
"ignoreFailures": true
},
// 设置反汇编格式为 Intel 风格
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
// 调试前执行的任务,tasks.json 中定义的任务名称
"preLaunchTask": "C/C++: gcc.exe build active file"
}
],
"version": "2.0.0"
}
- 2.2 新建task.json文件,用于调试器前执行的操作:
// 该文件定义了构建任务,用于编译代码
{
"tasks": [
// c 编译
{
// 任务类型,shell 表示执行 shell 命令
"type": "shell",
// 任务名称,供调试器或任务面板使用
"label": "C/C++: gcc.exe build active file",
// 执行的命令,指定 GCC 编译器路径
"command": "C:\\msys64\\ucrt64\\bin\\gcc.exe",
// 命令行参数
"args": [
// 启用彩色输出
"-fdiagnostics-color=always",
// 启用调试信息
"-g",
// 当前编辑的源文件
"${file}",
// 指定输出文件路径
"-o",
// 生成与源文件同名的 .exe 文件
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
// 任务运行的工作目录
"cwd": "${fileDirname}"
},
// 用于解析编译器输出中的错误信息,$gcc 是 GCC 编译器的默认匹配器
"problemMatcher": [
"$gcc"
],
"group": "build",
// 说明
"detail": "Task generated by Debugger."
},
// c++ 编译
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
// 用于指定任务所属的组,
"group": {
// 任务的类型 build 表示构建任务 "test": 表示测试任务 其他不会触发内置操作
"kind": "build",
// 标志这是该类型的默认任务
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
-
2.3 新建一个
.c
或者.cpp
文件点击调试:-
c调试
-
c++调试
-
3. 调试python
python调试具体步骤如下:
- 安装插件Python、Python Debugger
- 生成默认配置文件
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
3. 运行
4. 调试rust
rust调试比较简单,只需要安装插件rust-analyzer
即可
总结
主要介绍了ts、c/c++、python、rust调试过程。在vscode中使用调试器需要安装相关插件和环境,调试配置主要配置在 launch.json
中。比如c/c++需要通过预设的 preLaunchTask
项在task.json
文件中设置进行自动编译。
如有错误,请指正O^O !
可以接着看: