Ubuntu 环境下的 C/C++ 编译与调试配置方法

 更新时间:2024年11月28日 11:49:10   作者:FHKHH  
本文档详细介绍了如何在Ubuntu环境中使用VSCode进行C/C++的编译与调试配置,通过配置`tasks.json`和`launch.json`,实现了统一管理输出文件、优化调试流程以及跨平台兼容性,配置了`g++`编译器和`gdb`调试器,并使用C/C++插件来提高开发效率,感兴趣的朋友跟随小编一起看看吧

详细教学文档:Ubuntu 环境下的 C/C++ 编译与调试配置

本文档将手把手引导你完成在 Ubuntu 环境中设置 VS Code 的 tasks.jsonlaunch.json,实现以下目标:

  • 统一管理输出文件:将所有编译生成的可执行文件统一存放到项目的 build 目录。
  • 优化调试流程:调试器自动定位 build 中的可执行文件,免去手动调整路径的麻烦。
  • 跨平台兼容性:确保配置适用于 Ubuntu 和其他类 Unix 系统。

前提条件

在开始之前,请确保系统已安装以下工具:

g++ 编译器
安装命令:

sudo apt install g++

gdb 调试器
安装命令:

sudo apt install gdb

VS Code 扩展

C/C++ 插件(Microsoft 提供):在扩展市场中搜索 “C/C++” 并安装。

创建项目目录结构

建议项目目录结构如下:

project-root/
├── build/           # 编译生成的可执行文件目录
├── src/             # 源代码文件目录
│   ├── main.cpp     # 示例源代码文件
├── tasks.json       # VS Code 任务配置文件
└── launch.json      # VS Code 调试配置文件

执行以下命令创建目录结构:

mkdir -p project-root/build
mkdir -p project-root/src

将你的源代码放入 src 目录,例如创建一个简单的 main.cpp

#include <iostream>
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

配置 tasks.json 文件路径

tasks.json 保存到项目目录下的 .vscode 文件夹中。如果文件夹不存在,使用以下命令创建:

mkdir -p project-root/.vscode
touch project-root/.vscode/tasks.json

完整配置内容

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 编译到 build 目录 (Ubuntu)",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",   // 彩色错误提示
                "-g",                          // 启用调试信息
                "${workspaceFolder}/src/${fileBasename}", // 指定源文件路径
                "-o",                          // 输出选项
                "${workspaceFolder}/build/${fileBasenameNoExtension}" // 输出文件路径
            ],
            "options": {
                "cwd": "${workspaceFolder}"     // 设置工作目录为项目根目录
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true              // 默认构建任务
            },
            "detail": "将当前活动文件编译到 build 目录中"
        }
    ]
}

关键解释

  • ${workspaceFolder}:指代项目根目录。
  • ${fileBasename}:当前活动文件的文件名(包括扩展名)。
  • ${fileBasenameNoExtension}:当前活动文件的文件名(不包括扩展名)。
  • -g:开启调试符号,支持调试功能。

配置 launch.json 文件路径

launch.json 保存到 .vscode 文件夹中:

touch project-root/.vscode/launch.json

完整配置内容

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++ Runner: Debug Session",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/build/${fileBasenameNoExtension}", // 指向 build 中的可执行文件
      "args": [],                           // 可选参数,留空
      "stopAtEntry": false,                 // 是否在入口处停止
      "cwd": "${workspaceFolder}/build",    // 调试时的工作目录
      "environment": [],                    // 环境变量
      "externalConsole": false,             // 使用内嵌终端
      "MIMode": "gdb",                      // 使用 gdb 调试
      "miDebuggerPath": "/usr/bin/gdb",     // gdb 路径
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

关键解释

  • program:动态指向 build 目录中的可执行文件,自动根据源文件名匹配。
  • cwd:调试器工作目录,设置为 build
  • miDebuggerPath:指定调试器路径。

使用步骤

1. 编译程序

  • 打开源文件,例如 src/main.cpp
  • 按快捷键 Ctrl + Shift + B 或从菜单中选择 任务 -> 运行任务
  • 确保可执行文件生成到 build 目录,例如 build/main

2. 调试程序

  • 按快捷键 F5 或从菜单中选择 运行 -> 启动调试
  • 程序将在 build 目录下运行,调试器会附加到进程。

常见问题排查

问题 1:g++gdb 未安装

解决方法

sudo apt install g++ gdb

问题 2:build 目录不存在或无写权限

解决方法

mkdir -p buildchmod +w build

问题 3:调试时程序无法找到输入文件

原因:默认工作目录为 build
解决方法:将输入文件复制到 build 目录,或使用绝对路径。

最终效果总结

  • 统一输出路径:所有可执行文件存储在 build 目录,管理更清晰。
  • 一键调试:按 F5 即可运行调试,无需手动配置路径。
  • 易于扩展:适用于多文件项目,通过修改 tasks.jsonargs 增加编译参数即可支持复杂构建需求。

祝你使用愉快!

到此这篇关于Ubuntu 环境下的 C/C++ 编译与调试配置的文章就介绍到这了,更多相关Ubuntu 编译调试 C++内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入讲解C++中的构造函数

    深入讲解C++中的构造函数

    这篇文章主要介绍了C++中的构造函数,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++全密码生成的实现代码

    C++全密码生成的实现代码

    这篇文章主要为大家详细介绍了C++全密码生成的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C语言常用标准头文件使用实例

    C语言常用标准头文件使用实例

    在C的系列语言程序中,头文件(通常扩展名为.h)被大量使用,它通常包含函数、变量、结构体等的声明和定义,以及一些宏定义和类型定义,这篇文章主要给大家介绍了关于C语言常用标准头文件使用的相关资料,需要的朋友可以参考下
    2024-08-08
  • 关于C++中void*的小作用浅析

    关于C++中void*的小作用浅析

    这篇文章主要给大家介绍了关于C++中void*的一些小作用,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-08-08
  • C++浮点型的存储方式详解

    C++浮点型的存储方式详解

    本篇文章是对C/C++浮点数在内存中的存储方式进行了详细的分析介绍,需要的朋友参考下,希望能够给你带来帮助
    2021-09-09
  • QT自定义QTextEdit实现大数据的实时刷新显示功能实例

    QT自定义QTextEdit实现大数据的实时刷新显示功能实例

    TextEdit是我们常用的Qt控件,用来显示文本信息,下面这篇文章主要给大家介绍了关于QT自定义QTextEdit实现大数据的实时刷新显示功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • C++ Boost Exception超详细讲解

    C++ Boost Exception超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C语言中数据结构之链表归并排序实例代码

    C语言中数据结构之链表归并排序实例代码

    这篇文章主要介绍了C语言中数据结构之链表归并排序实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • 纯C语言:递归组合数源码分享

    纯C语言:递归组合数源码分享

    这篇文章主要介绍了纯C语言:递归组合数源码,有需要的朋友可以参考一下
    2014-01-01
  • C++基础入门教程(一):基础知识大杂烩

    C++基础入门教程(一):基础知识大杂烩

    这篇文章主要介绍了C++基础入门教程(一):基础知识大杂烩,本文讲解了注释、头文件、命名空间等内容,需要的朋友可以参考下
    2014-11-11

最新评论