专业的编程技术博客社区

网站首页 > 博客文章 正文

Linux下如何使用Visual studio code调试程序

baijin 2024-09-04 02:11:50 博客文章 5 ℃ 0 评论

1.安装VSCode

我们在Windows下调试程序时,很多时候都需要进行断点调试,可以快速定位问题。但是在Linux环境下开发时,很多时候不会使用专门的IDE工具,而是直接用gedit文本工具编写代码,然后用makefile编译,一但代码有问题需要排故,传统的做法都是使用printf在可能出问题的位置打印调试信息,逐行排故,效率非常低。今天我来给大家讲讲如何使用Visual studio code工具调试程序,运行环境如下:

  1. 操作系统:ubuntu 16.04 LTS;
  2. VS Code版本:1.33.1。

下面先简单说明一下如何安装VS Code:

  • ubuntu16.04及以上版本,直接在终端中执行以下命令:umake ide visual-studio-code,即可在线安装;
  • ubuntu14.04及以下版本,需要下载安装包,格式为.deb,直接双击即可安装。

2.修改Launch.json

首先,先将程序所在的文件夹加载到VSCode工作区中,如下图所示:

选择最左边的“蜘蛛”图标,切换到下图所示界面:

可以看到在上图所示绿色三角形箭头处显示为“没有配置”,将鼠标放到旁边的工具图标,弹出如下提示:

这个工具图标是用来配置或修复“Launch.json"脚本文件的,该脚本文件用于编写VSCode运行时执行的应用程序的路径。点击该图标,出现如下图所示提示:

这里选择“C++(GDB/LLDB)”选项,弹出如下更多的选项:

选择“cpp build and debug active file”选项,会弹出如下提示框:

点击“打开Launch.json”按钮后,VSCode主界面并没有看到Launch.json的界面,需要点击一下配置按钮才能看到:

对,就是点一下上图中绿色三角形右边的配置按钮,就可以看到Launch.json文件了:

点击上图中右下角的“添加配置”按钮,弹出下面选择项:

选择“c/c++ (gdb) Launch”后,会自动添加如下脚本代码:

上图中蓝色背景处就是新增加的代码,按下面方法进行修改:

{
 "name": "mytest (gdb) Launch", //修改1
 "type": "cppdbg",
 "request": "launch",
 "program": "${workspaceFolder}/build/test", //修改2
 "args": [],
 "stopAtEntry": false,
 "cwd": "${workspaceFolder}/build", //修改3
 "enviroment": [],
 "externalConsole": false, //修改4
 "MIMode": "gdb",
 "setupCommands": [
 {
 "description": "Enable pretty-printing for gdb",
 "text": "-enable-pretty-printing",
 "ignoreFailures": "true"
 }
 ],
 "preLaunchTask": "test_build" //修改5
},
  1. 修改1:运行名称,配置完成后,在绿色三角形旁边的下拉菜单会出现该选项;
  2. 修改2:可执行程序文件路径,这里test为我编译出的可执行文件名;
  3. 修改3:Debug下运行后当前工程路径,当代码中有用到相对路径时,该变量要设置成与可执行文件相同的路径;
  4. 修改4:程序运行后是否使用外部终端,ture为使用,false为不使用;
  5. 修改5:运行前执行编译的命令,需要与task.json中的名称一致。

3.修改tasks.json

tasks.json用于配置编译任务,可以直接点击工作区中的tasks.json打开:

如果工作区没有该tasks.json文件,可以按“CTRL+P”快捷键,然后输入框中输入>task,选择“Tasks:Configure Task”,然后选择“C/C++:cpp build active file”,即可打开tasks.json文件:

增加如下蓝色背景处显示的配置脚本:

重要字段说明:

  1. label:编译任务名,需要与Launch.json中preLaunchTask字段属性一致,配置完成后,按快捷键“CTRL+SHIFT+B”,会弹出该处配置的名称,如“test_build”;
  2. command:为shell语句,其实就是进入指定的路径下执行make指令,前提是该目录下有makefile文件用于编译源文件;
  3. guoup:组名,如果没有这句,按快捷键“CTRL+SHIFT+B”后,没有test_build编译任务选择。

4.断点调试

现在万事俱备了,让我们一起见证奇迹吧,先按快捷键"CTRL+SHIFT+B",会弹出如下编译任务:

点击“test_build”或按回车键,开始编译:

编译完成后,在程序中需要设置断点的位置按“F9”快捷键增加断点,按“F5”快捷键调试运行,奇怪,终端中提示程序都运行完了,为什么程序没在断点处停下来呢,如下图所示?

这个问题困扰了我好久,心想,难道就只能用VSCode编写代码吗,也太大材小用了,就在我快要放弃的时候,突然灵光一闪,想到在windows下必须将编译选项也要设置为Debug才能进断点,而如果是Release则不能进断点,对应到linux环境下,我怀疑makefile编译出来是的不带GDB信息的可执行文件,按照这个思路,我在网上搜了一搜,哈哈,不到半分钟,就让我搜到了,需要在CMakeLists.txt加入下面三句话(因为我的makefile是通过cmake指令产生的,关于cmake相关知识,大家请自行百度)就可以了:

SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

重新生成makefile文件。

按“F5”快捷键调试运行,期待已久的画面终于出现了:

按“F10”快捷键,就可以单步运行了:

在工作区左边的变量区可以查看局部变量的当前值,爽吧。

好了,希望这篇文章对希望在linux下进行断点调试程序的你有所帮助。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表