欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu中使用VScode编译调试C/C++

程序员文章站 2022-04-02 21:08:44
...

总体上来说还是可以的,除了一些很奇怪的小bug外,整体上调试起来还是不错的,主要是颜值高啊,界面分割的合理啊,简洁明了啊,不像有些IDE看着就累,更别说调试了。

估计大部分人在linux上组织工程项目是用cmake吧,那就装下面这个插件,这样就能让cmakelists有语法高亮功能,要不然看上去全是清一色,不好看。

Ubuntu中使用VScode编译调试C/C++
写好CMakeLists.txt后,就可以编译了

注意要想能够调试代码要将CMakeLists.txt中的编译模式设为Debug模式,也就是要加入下面这句代码:

set(CMAKE_BUILD_TYPE Debug)

1.编译和生成

法一:略麻烦,并且每次修改代码后都要在vscode的终端中手动输入下面命令来重新编译:

mkdir build
cd build
cmake ..
make

法二:配置tasks.json文件

按Ctrl+Shift+P打开vscode控制台,输入Tasks: Configure Tasks,再选择Create tasks.json file from templates,选择Others模板,就自动生成了一个tasks.json文件

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",//这里的名称记住,需要跟launch.json中的prelaunch一项的内容相同
            "type": "shell",
            "command": "bash .vscode/build.sh",//build.sh文件需要自己编写
            "group":{//新建该项
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

然后在./vscode目录下新建build.sh,并将内容设为:

#!/bin/bash
cd build
cmake ..
make

这样就可以通过Ctrl+Shift+B来执行tasks.json,间接地执行bash .vscode/build.sh命令,从而实现程序的编译和生成了

如果没有报错则说明编译成功了,下面就可以运行或调试了

2.运行和调试

Ubuntu中使用VScode编译调试C/C++

在上面的视图中,点击添加配置

Ubuntu中使用VScode编译调试C/C++

选择C++(GDB/LLDB)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/imageBasics",//该项填写生成的可执行文件的实际路径,注意后缀名
            "args": [],//如果要给main函数传参数,在此添加。注意每项要加引号并用逗号隔开
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask":"echo"//新建该项,这样就可以每次按F5运行程序之前先执行task.json的内容,也就是重新编译和生成程序
            //注意该项的内容要与tasks.json中的prelaunch的内容一致
        }
    ]
}

 

修改好并且保存后就可以调试或运行了。

按F5后可以看到vscode的终端重新编译和生成了一遍程序

Ubuntu中使用VScode编译调试C/C++

运行时程序也会停在断点处

Ubuntu中使用VScode编译调试C/C++

可以看出程序停在了断点处,下面就可以分步调试了。

3.智能感知IntelliSense

最后,为了更好的能够IntelliSense,也就是不会出现下面的情况:

Ubuntu中使用VScode编译调试C/C++

首先必须在CMakeLists.txt中加入下行代码,然后再进行编译和生成,这样就会在编译时生成compile_commands.json文件

set(CMAKE_EXPORT_COMPILE_COMMANDS on)

然后点击其中任意一个include后,再点击上方出现的小灯泡,选择第二个选项

Ubuntu中使用VScode编译调试C/C++

这时会新建c_cpp_properties.json文件,并新建"compileCommands"一项

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compileCommands": "build/compile_commands.json",//新建该项,填入编译时生成的compile_commands.json文件所在的路径
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

保存后就可以看到,包含的源文件都能找到了,因此也就能智能感知了:

Ubuntu中使用VScode编译调试C/C++