1.安装VSCode
我们在Windows下调试程序时,很多时候都需要进行断点调试,可以快速定位问题。但是在Linux环境下开发时,很多时候不会使用专门的IDE工具,而是直接用gedit文本工具编写代码,然后用makefile编译,一但代码有问题需要排故,传统的做法都是使用printf在可能出问题的位置打印调试信息,逐行排故,效率非常低。今天我来给大家讲讲如何使用Visual studio code工具调试程序,运行环境如下:
- 操作系统:ubuntu 16.04 LTS;
- 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:运行名称,配置完成后,在绿色三角形旁边的下拉菜单会出现该选项;
- 修改2:可执行程序文件路径,这里test为我编译出的可执行文件名;
- 修改3:Debug下运行后当前工程路径,当代码中有用到相对路径时,该变量要设置成与可执行文件相同的路径;
- 修改4:程序运行后是否使用外部终端,ture为使用,false为不使用;
- 修改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文件:
增加如下蓝色背景处显示的配置脚本:
重要字段说明:
- label:编译任务名,需要与Launch.json中preLaunchTask字段属性一致,配置完成后,按快捷键“CTRL+SHIFT+B”,会弹出该处配置的名称,如“test_build”;
- command:为shell语句,其实就是进入指定的路径下执行make指令,前提是该目录下有makefile文件用于编译源文件;
- 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下进行断点调试程序的你有所帮助。
本文暂时没有评论,来添加一个吧(●'◡'●)