Vscode编译调试C++程序

一、简介

本文讲述在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

Vscode编译调试C++程序_第1张图片

在​ ​​​​​​https://jmeubank.github.io/tdm-gcc/

下载一个最新的gcc

Vscode编译调试C++程序_第2张图片

安装gcc后,在cmd中执行命令:gcc -v。如果看到有如下输出,则表明gcc安装成功了。

Vscode编译调试C++程序_第3张图片

三、创建项目

在Windows中新建文件夹(比如Test1A),新建main.cpp作为测试用的例子

Vscode编译调试C++程序_第4张图片

在main.cpp中增加内容如下:

#include 

int main()
{
    printf("hello world\n");
    getchar();
    return 0;
}

在Vscode中:文件 -> 打开文件夹。打开上述文件夹Test1A

Vscode编译调试C++程序_第5张图片

然后可以看到刚刚创建的文件夹和文件都已经被添加进来了。

Vscode编译调试C++程序_第6张图片

四、编译运行项目

然后我们还得改Vscode设置,否则编译运行时会出现问题。文件 -> 首选项 -> 设置 -> 用户 -> 扩展 -> Run Code Configuration,把里面的Run In Terminal 选项勾上

Vscode编译调试C++程序_第7张图片

 Vscode编译调试C++程序_第8张图片

完成上述操作后,重启Vscode。鼠标右键单机Vscode的代码编辑区,在出现的右键菜单中,点击“Run Code”

Vscode编译调试C++程序_第9张图片

然后我们可以看到在项目目录下生成了main.exe。

Vscode编译调试C++程序_第10张图片

在Vscode的终端中可以看到输出了我们代码中的内容(下图中的"4"是为了让代码中的getchar()能执行下去)

Vscode编译调试C++程序_第11张图片

注意:在Vscode中编译C++程序是有局限性的,而且经常会导致各种各样的问题,所以我们一般在cmd或者linux的终端中通过命令行或者makefile编译好程序,再通过Vscode调试。

五、通过GDB调试程序

运行 -> 启动调试。选择C++(GDB/LLDB)-> g++.exe

Vscode编译调试C++程序_第12张图片

可以看到执行上述操作后生成了launch.json

Vscode编译调试C++程序_第13张图片

我们得对里面的一些配置(主要就是下面的三个参数)进行修改。为了避免出错,都改成绝对路径。其中:

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

可以看到可以调试了

Vscode编译调试C++程序_第14张图片

注意:如果设置断点后,调试出现报错:Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained。 

则要手动在控制台中添加-g选项编译程序(这也是在Vscode中编译C++程序的局限性之一)

Vscode编译调试C++程序_第15张图片

六、参考

《windows 10上使用vscode编译运行和调试C/C++》

你可能感兴趣的:(C++,vscode,c++,gdb)