Ubuntu上vscode调试C/C++代码

这篇文章起初是我看了一个B站的视频,作者讲述了如何在Ubuntu的 环境中通过使用vscode调试C/C++代码。
这个教程非常好,也非常推荐给大家,但是这个教程有一个局限性,就是他在他的公共号上写的教程非常简略,以至于我想再次看一遍,需要重新看一遍视频,非常低效,所以我打算根据这位大佬的视频教程,写一篇博客,这样方便自己,也方便大家。
当然大家在网上也会搜到和我标题差不多的教程,但是我都看了一遍,都挺狗的,写的非常简略,你按照他们的教程基本就学的一个寂寞。

不过这里面也有挺多坑的,一般不自己梳理一遍很容易出现问题。里面需要书写cmake的文件

在这次教程中,我也会写一下,一个简单的C++项目,通过这个项目,大体梳理一下,整个调试的流程.

插件安装

进行C、C++项目的编译和调试。vscode上的插件必不可少。
在这里插入图片描述
目前,我用到的是,上面的这些。

简单的C++项目

首先看截图,
在这里插入图片描述
主要的文件结构也比较简单,主要就是include,src,CmakeLists.txt。
CmakeLists.txt主要功能就是通过cmake这个工具,将整个项目进行编译,然后方便我们后续的调试

CmakeLists.txt 文件书写

CmakeLists.txt里面的内容是

cmake_minimum_required(VERSION 3.0)

project(SOLIDERFIRE)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

set(CMAKE_BUILD_TYPE Debug)

include_directories(${CMAKE_SOURCE_DIR}/include)

add_executable(my_cmake_exe main.cpp src/Gun.cpp src/Solider.cpp)

上面的内容简单直白。

  • my_cmake_exe编译成功产生的可执行文件的名字。
  • C M A K E S O U R C E D I R 是 C m a k e L i s t s . t x t 位 于 的 绝 对 路 径 除 此 之 外 , 我 们 还 可 以 给 这 个 文 件 加 入 其 他 的 优 化 选 项 , 以 及 配 置 参 数 一 般 的 就 是 ‘ s e t ( C M A K E C X X F L A G S , " {CMAKE_SOURCE_DIR} 是CmakeLists.txt 位于的绝对路径 除此之外,我们还可以给这个文件加入其他的优化选项,以及配置参数 一般的就是 `set(CMAKE_CXX_FLAGS, " CMAKESOURCEDIRCmakeLists.txtset(CMAKECXXFLAGS,"{CMAKE_CXX_FLAGS} -g -O2 -Wall")进行代码的优化,具体的当然也可以自行谷歌。(但是这种带优化的的编译选项会有一个问题,就是无法很好的调试) 在CmakeLists.txt中写入新的参数之后,需要重新执行cmake … 以及make`对项目进行编译。

set(CMAKE_BUILD_TYPE Debug) 这个参数非常重要,表示整个项目是支持debug调试的。

注意,每次CmakeLists.txt文件更新之后,需要执行一下 make进行重新的编译。

cmake 编译 以及 make生成可执行文件

cmake 编译

然后我们新建一个文件夹build,然后在命令行中进入build文件夹,执行 cmake ..
这样新生成的文件都会放在build文件夹之下了。
在这里插入图片描述

执行完cmake ..命令之后的文件目录:
在这里插入图片描述
可以看到生成了Makefile文件。这就是我们想要的。

make生成可执行文件

然后继续在build文件夹之下执行,make命令
在这里插入图片描述
可以看到这样,我们就生成了可执行程序my_cmake_exe
再看一下我们的文件目录:
在这里插入图片描述
然后需要注意的是,当你下次修改了项目中的某个文件之后,还需要执行make重新进行编译,同时这个命令也只会编译其中被修改过的文件,其他文件不会被编译。

launch.json文件书写

前面的两个小的章节是对整个项目进行编译,然后产生可执行程序,然后运行整个项目的结果。
在这里插入图片描述
点击左边栏目上,虫子和三角的符号就会出来这个界面,然后点击create a lauch.json按钮。
就会出来lauch.json这个文件,对这个文件进行编辑。

在这里插入图片描述
然后我们需要对两个最重要的参数进行编辑:

  • "program": "${workspaceFolder}/build/my_cmake_exe",
  • "preLaunchTask": "C/C++: g++ build active file",

第一个参数就是说,我通过cmake生成的可执行文件的位置,${workspaceFolder}代表整个项目的绝对路径。

在这里插入图片描述

task.json文件书写

lauch.json中设置的"preLaunchTask": "C/C++: g++ build active file",就是为task.json服务的。

我们在菜单栏中依次选择terminal-> Configure Default Build task
设置task.json文件。

然后就有朋友问了,这个突如其来的task.json文件是干嘛的呢?

其实这个文件是将我们之前的两个操作(cmake .. 以及 make)自动化实现起来的。
其中下面的截图中:

  • label:代表任务名
  • command:代表我们执行的命令
  • args: 代表执行命令跟的参数。

在这里插入图片描述
tasks下面有三个大括号,两个是 我们自定义的任务,还有一个是将这两个任务串联起来的命令,还有一个是开头的cwd命令,是指我们进行下面这些脚本操作的文件路径的位置。

好了,现在大家还记得我们在launch.json里面的"preLaunchTask": "C/C++: g++ build active file"参数吗?
这个参数意思就是,我们在执行lauch.json之前需要执行的操作是什么。

我现在将之修改为"preLaunchTask": "Build. 这个Build的来源是task.json中第三个大括号的label名。

  {
          "label": "Build",
    "dependsOrder": "sequence", // 按列出的顺序执行任务依赖项
          "dependsOn":[
              "cmake",
              "make"
          ]
      }
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值