本文讲述在windows平台下在Vscode中使用g++编译本地C++程序,并使用gdb调试的方法。可能有些朋友会说:windows上不是已经有visual studio这个最强IDE了吗,为什么还要用Vscode调试?是的,确实没错,单纯用Vscode编译调试本地程序确实没什么用。但是用它来远程调试linux程序就很有用了。试想一下这么一个场景:你的linux服务器/linux应用程序部署在客户现场,客户的电脑配置和环境跟你开发用的电脑不一样,客户电脑中没有也不能安装IDE。这时候他们那边出现了你开发过程中没有遇到的bug。老板叫你到那边出差调试,但你不想去,你想:如果这个时候你可以在本机(公司开发的电脑)上远程调试客户电脑上的程序,那该多好啊。没错,在博主的另一篇文章《VsCode + gdb + gdbserver远程调试C++程序》讲述了远程调试的方法。而本篇文章则相当于该文章的前置学习文章,可以让大家更了解Vscode的使用。
首先在Vscode中安装如下插件:
C/C++
C/C++ Extension Pack
Code Runner
在 https://jmeubank.github.io/tdm-gcc/
下载一个最新的gcc
安装gcc后,在cmd中执行命令:gcc -v。如果看到有如下输出,则表明gcc安装成功了。
在Windows中新建文件夹(比如Test1A),新建main.cpp作为测试用的例子
在main.cpp中增加内容如下:
#include
int main()
{
printf("hello world\n");
getchar();
return 0;
}
在Vscode中:文件 -> 打开文件夹。打开上述文件夹Test1A
然后可以看到刚刚创建的文件夹和文件都已经被添加进来了。
然后我们还得改Vscode设置,否则编译运行时会出现问题。文件 -> 首选项 -> 设置 -> 用户 -> 扩展 -> Run Code Configuration,把里面的Run In Terminal 选项勾上
完成上述操作后,重启Vscode。鼠标右键单机Vscode的代码编辑区,在出现的右键菜单中,点击“Run Code”
然后我们可以看到在项目目录下生成了main.exe。
在Vscode的终端中可以看到输出了我们代码中的内容(下图中的"4"是为了让代码中的getchar()能执行下去)
注意:在Vscode中编译C++程序是有局限性的,而且经常会导致各种各样的问题,所以我们一般在cmd或者linux的终端中通过命令行或者makefile编译好程序,再通过Vscode调试。
运行 -> 启动调试。选择C++(GDB/LLDB)-> g++.exe
可以看到执行上述操作后生成了launch.json
我们得对里面的一些配置(主要就是下面的三个参数)进行修改。为了避免出错,都改成绝对路径。其中:
program:调试入口文件的地址
cwd:程序启动调试的目录
miDebuggerPath:调试器的路径
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "D:\\Demo\\test\\gdb\\Test1A\\main.exe",
"args": [],
"stopAtEntry": false,
"cwd": "D:\\Demo\\test\\gdb\\Test1A",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\SoftWare\\TDM-GCC-64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe 生成活动文件"
}
]
}
在main.cpp中设置断点,重新按F5
可以看到可以调试了
注意:如果设置断点后,调试出现报错:Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained。
则要手动在控制台中添加-g选项编译程序(这也是在Vscode中编译C++程序的局限性之一)
《windows 10上使用vscode编译运行和调试C/C++》