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语言中char*和char[]用法区别分析

    C语言中char*和char[]用法区别分析

    这篇文章主要介绍了C语言中char*和char[]用法区别,包括使用过程中的误区及注意点分析,需要的朋友可以参考下
    2014-09-09
  • C语言中结构体和共用体实例教程

    C语言中结构体和共用体实例教程

    这篇文章主要给大家介绍了关于C语言中结构体和共用体的相关资料,结构体是一种自定义的复合数据类型,共用体也叫联合体,使几个不同类型的变量共占一段内存(相互覆盖),需要的朋友可以参考下
    2021-06-06
  • C++实现通讯录管理系统

    C++实现通讯录管理系统

    这篇文章主要为大家详细介绍了C++实现通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 基于C语言实现的扫雷游戏代码

    基于C语言实现的扫雷游戏代码

    这篇文章主要介绍了基于C语言实现的扫雷游戏代码,对于学习游戏开发的朋友有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C++ Assert()断言机制原理以及使用方法

    C++ Assert()断言机制原理以及使用方法

    下面小编就为大家带来一篇C++ Assert()断言机制原理以及使用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,内含所有数字和非数字字符。将其中连续的数字作为一个整数,依次存放到一个数组中,统计共有多少个整数,并输出这些数
    2013-09-09
  • c++中struct和class的区别小结

    c++中struct和class的区别小结

    在C++中,class和struct都是用于定义自定义数据类型的关键字,本文主要介绍了c++中struct和class的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • string居然也可以用<<和>>

    string居然也可以用<<和>>

    今天小编就为大家分享一篇关于string居然也可以用<<和>>,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 利用C语言实现猜数字游戏

    利用C语言实现猜数字游戏

    这篇文章主要为大家详细介绍了利用C语言实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • C++常用的#include头文件总结

    C++常用的#include头文件总结

    这篇文章主要介绍了C++常用的#include头文件,对初学者理解C++程序设计大有好处的相关资料
    2014-07-07

最新评论