11 为vs code配置调试
Part 1、安装调试用到的工具
一、安装调试器
以下两种调试器安装其中一个即可。
-
gdb
建议在
Linux
或者Windows
下安装。- Linux
sudo apt install gdb -y
-
Windows
此时你应该使用的是MinGW,那么它自带了gdb调试工具。这种情况下,你需要确保MinGW的bin目录列在了Windows的Path变量中,并且将mingw32-make.exe复制一份,并将复制品改名为make.exe。
- Linux
-
LLDB
建议在
macOS
下安装。如果你的系统中有了clang
,那么一般都已经安装了lldb
。如果没有,请发出如下命令:brew install lldb -y
lldb
也可以在Linux
使用。你可以这样来安装:sudo apt install lldb -y
二、安装插件
针对于不同的调试器,安装以下二者之一即可。
- C/C++ IntelliSense
- 此插件支持的调试器是
gdb
,在Windows
和Linux
下均可用。
- 此插件支持的调试器是
- CodeLLDB
- 此插件支持的调试器是
LLDB
,Linux
和macOS
下可用。
- 此插件支持的调试器是
CodeLLDB安装出错的解决方案
在Windows(WSL)下安装CodeLLDB
插件的过程大概率会出错,原因是插件无法下载。可以这样来解决问题:
-
手动下载插件
将出错信息中的下载链接复制下来,可能是这样的:
https://github.com/vadimcn/vscode-lldb/releases/download/v1.6.10/codelldb-x86_64-windows.vsix
将链接粘贴到浏览器的地址栏中,然后回车,下载就开始了。下载完成后,将这个
.vsix
文件移动到一个容易访问的磁盘,例如D:
盘根目录下。 -
安装插件
在
VS Code
中,点击左侧的插件按钮,然后点击靠近顶部的...
,在下拉菜单中选择从VSIX安装/install from VSIX,在出现的输入框中输入存放插件的位置,例如/mnt/d
,选择列出的插件就开始安装了。
Part 2、配置调试器
一、配置编译任务
在启动调试之前,可能需要编译链接源代码,因此需要配置编译任务。
-
点击主菜单栏中的终端(Terminal),选择配置任务(Configure Tasks…)
-
在出现的选择窗口中,选择
C/C++: gcc build active file
- 此后,在项目目录下,将会生成一个
.vscode
子目录,任务配置tasks.json
就存放在这个目录下。现在编辑生成的tasks.json
,内容类似于如下:{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "MinGW build", "command": "gcc", "args": [ "-g", "-Wall", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": "build", "detail": "compiler: gcc" }, { "type": "cppbuild", "label": "gcc build", "command": "gcc", "args": [ "-g", "-Wall", "-fsanitize=address", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": "build", "detail": "compiler: gcc" } ] }
以上配置中,为
MinGW
和Linux gcc
下的任务分别进行了配置。这里说明一下配置中关键的键和值的含义:
- label:指定了此配置的名称,我们在后面还要用到。
- args:编译选项。
- -g:启用调试模式
- -Wall:开启所有警告
- -o:指定可执行文件名。假设源文件是
/mnt/d/tmp/myprog.c
,则${fileDirname}
就是/mnt/d/tmp
,${fileBasenameNoExtension}
就是myprog
。注意:在Windows下显式指定了可执行文件的扩展名(后缀名)为.exe
。
-
语言标准选项
如果你需要使用最新的语言标准,并且你用的编译器支持,那么可以在
args
键值下的-o
选项前,加上一下两项标准之一:C23
"-std=c2x",
C++ 23
"-std=c++23",
一旦任务配置好,那么就可以在菜单终端->运行任务中,选择配置好的任务之一执行。
二、配置调试器
无论是gdb
还是LLDB
,它们在VS Code
的配置几乎是一样的。
-
打开你的项目目录(文件夹)。
根据需要,直接打开或者远程连接上项目目录。
原则上,应该为每一个项目配置调试信息。
- 点击
VS Code
界面左侧的调试按钮。这个按钮长这样:如果是第一次,那么会出现类似于这样的字样:
为运行和调试,创建一个 launch.json 文件
其中,
launch.json
是一个链接。 -
点击这个链接,
VS Code
就会弹出一个选择框:在此选项中选择
C++(GDB/LLDB)
。此后,
VS Code
会在你的当前项目目录下新建一个名为.vscode
的子目录,并在其中新建一个名为launch.json
的配置文件。同时这个文件会在VS Code
右侧的编辑框中打开,其初始内容如下:{ // 一些注释 "version": "0.2.0", "configurations": [] }
-
编辑
launch.json
文件,添加内容如下:{ "version": "0.2.0", "configurations": [ { //for gdb "name": "GDB", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "cwd": "${fileDirname}", "MIMode": "gdb", "args": [], "stopAtEntry": false, "environment": [], "externalConsole": false, "setupCommands": [ { "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "gcc build", "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; gdb -q --interpreter=mi" }, { //for lldb "name": "LLDB", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "cwd": "${fileDirname}", "args": [], "preLaunchTask": "gcc build", } ] }
注意事项:
preLaunchTask
键值指定了在调试前需要预先执行的任务。这个任务一般是在tasks.json
中配置好的任务(名)之一。例如,这里GDB
配置下给出的任务是gcc build
。program
键值下的可执行代码名必须与tasks.json
里-o
选项后的配置一样。
Part 3、调试程序
这里给出示例的假设基础:
- 编译器:gcc
- 工作目录名:myproject
- 源码:f.c
- 启动调试
- 在源码中需要暂停的地方按
F9
设置(或取消)断点。鼠标也可以操作。 - 点击左侧的调试按钮,将出现这样的窗口:
顶部默认的调试配置是我们在
launch.json
中写好的GDB
。可以根据需要,选择配置好的其他选项,例如LLDB
。- 点击
GDB
旁的绿色三角,调试开始。
直接按F5可以启用默认选项进行调试。
- 在源码中需要暂停的地方按
-
这是调试启动后的窗口示例。
可以看到,程序执行暂停在了断点上。
点击调试跟踪运行按钮中的一个,可以使程序单步、跟踪等操作。
注意,调试完成后请别忘了按那个橙粉色的方框按钮,以停止调试。
更多调试方法和技巧请自行查阅相关资料,这里不再赘述。
-
调试时出现乱码
如果在Windows环境下使用
MinGW
,那么在运行或调试时可能出现中文输出乱码的情况。在这种情况下,最佳的解决方案是,将源文件的编码从utf-8
改成gbk
。具体方法是:在VS Code
的右下角状态栏中,点击UTF-8
,选择保存为编码格式,选择简体中文(gbk)。