VSCode调试C++代码的多种方案

本文介绍了在Linux操作系统(包括WSL2)中使用VSCode编译和调试C++代码的三种方法:直接调用g++编译器、通过CMake构建系统和使用shell脚本。配置关键在于tasks.json和launch.json文件,前者定义了编译任务,后者配置了调试器参数。文章详细阐述了每个步骤并提供了配置示例。
摘要由CSDN通过智能技术生成

以下内容均针对 Linux 操作系统(包括Windows的Linux子系统WSL2)。

本文是对Linux系统中使用VSCode编译调试C++代码的系列文章的总结,前面三篇文章如下:

  1. 详解C/C++代码的预处理、编译、汇编、链接全过程
  2. Linux环境使用VSCode调试简单C++代码
  3. Linux环境使用VSCode调试CMake工程

1. 根本逻辑

在VSCode中编译调试C++代码的本质逻辑:

  • tasks.json 指定如何生成二进制可执行文件
    • 可以直接通过g++编译器生成
    • 可以通过CMake生成
    • 可以通过脚本.sh生成
  • launch.json负责配置gdb调试器,包括:指定可执行文件名、命令行参数,以及预执行任务(prelaunchTask)

2. 方案一:直接调用g++编译器生成可执行文件

具体过程在这篇文章中详细解释:Linux环境使用VSCode调试简单C++代码

这里简要概括重点内容。

  1. 第一步:将*.cpp源代码文件通过g++编译器生成一个可调试的可执行二进制文件

如果不在VSCode中运行,而是在终端中运行,需要运行下面的指令:

g++ -g hello.cpp -o hello

那么将这一步配置在VSCode的tasks.json中,tasks.json中的内容应该如下(具体过程可以参考上面的链接):

{
	"version": "2.0.0",
	"tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "编译器: /usr/bin/g++"
        }
    ]
}
  1. 第二步:调用gdb调试器对可执行文件进行调试

如果不在VSCode中运行,而是在终端中运行,需要运行下面的指令:

gdb hello

将这一步配置在VSCode的launch.json中,则launch.json中的内容应该如下(详细过程和解释同样可以参考上面链接):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "miDebuggerPath": "/usr/bin/gdb",
            "preLaunchTask": "C/C++: g++ 生成活动文件"
        }
    ]
}

3. 方案二:CMake生成可执行文件

具体过程在这篇文章中详细解释:Linux环境下使用VScode调试CMake工程

对于CMake工程,如果不使用VSCode,而是使用终端命令行方式进行编译的话,标准做法是:

cd build
cmake ..
make

那么将这个过程配置在VSCode的tasks.json中,其内容应该如下(详细过程见参考链接):

{
	"version": "2.0.0",
	"tasks": [
        {
            "label": "cmake",
            "type": "shell",
            "command": "cmake",
            "args": [
                "../"
            ],
            "options": {
                "cwd": "${fileDirname}/build"
            },            
        },
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args": [],
            "options": {
                "cwd": "${fileDirname}/build"
            }, 
        },
        {
            "label": "build",
            "dependsOn":["cmake", "make"]
        },
    ],
}

通过VSCode完成CMake编译过程后,将会在 build 目录下生成一个可执行文件。
调用gdb对生成的可执行文件进行调试,需要配置launch.json文件如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/build/${fileBasenameNoExtension}",
            "args": ["para1", "para2"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

4. 方案三:shell脚本生成可执行文件

脚本文件build_executable.sh的内容如下:

echo "Configuring and building ORB_SLAM3..."

mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake .. -Wno-dev
make -j8

该方案与方案二类似,即把cd build + cmake + make的过程写到shell脚本文件里,那么只需要把方案二中的cmake + make过程替换为执行.sh脚本文件即可,直接列出来参考的 tasks.jsonlaunch.json文件,可以发现,launch.json的内容基本没有变:

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "sh",
            "args": [
                "build_executable.sh"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: /usr/bin/g++"
        }
    ]
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
		{
            "name": "g++ - debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}
        
  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在Linux系统中使用VSCode编译调试C++代码的过程可以通过以下几篇文章进行学习和总结。首先是详解C/C++代码的预处理、编译、汇编、链接全过程的文章,然后是关于在Linux环境下使用VSCode调试简单C++代码的文章,最后是关于在Linux环境下使用VSCode调试CMake工程的文章。\[1\] 引用\[2\]:在VSCode调试代码的过程可以通过左侧菜单栏的第四个按钮来创建launch.json文件,并选择相应的配置。在调试过程中,可以使用不同的按钮来控制代码的执行,例如继续按钮用于执行到下一个断点的位置,单步跳过按钮用于执行下一行代码而不进入函数内部,单步调试按钮用于进入函数的内部,单步跳出按钮用于跳出当前调试的函数内部,重启按钮用于重新进行调试,断开连接按钮用于结束调试。\[2\] 引用\[3\]:如果在点击调试之后出现了"调试设置中的Python路径无效"的错误提示,可能是因为没有选择正确的Python解释器环境。可以通过点击左下角的Python interpreter来选择相应的环境。\[3\] 综上所述,要在VSCode调试代码,首先需要创建相应的配置文件,并选择合适的调试按钮来控制代码的执行。如果出现错误提示,需要检查Python解释器环境是否选择正确。 #### 引用[.reference_title] - *1* [VSCode调试C++代码多种方案](https://blog.csdn.net/hypc9709/article/details/129433484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [VSCode调试代码的三种方式](https://blog.csdn.net/cloki/article/details/127119973)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vscode调试代码方法](https://blog.csdn.net/qq_36814762/article/details/121888762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值