ubuntu+vscode+C/C++与单步调试

vscode安装和配置c++环境

有其他文章参考,待补充

c++插件

推荐插件
C/C++(编译器)
Code Runner(编译调试工具)
C++ Intellisense(自动补全)
Visual Studio IntelliCode(重构,检查)

编译和调试(compile&debug)

通用配置文件
launch.json
负责调动可执行文件,进行文件运行或者文件调试。

{
    
    
    "version": "0.2.0",
    "configurations": [
        {
    
    
            "name": "C/C++",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb",
            "preLaunchTask": "compile",
            "setupCommands": [
                {
    
    
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
        },
    ]
}

tasks.json

{
    
    
    "version": "2.0.0",
    "tasks": [
        {
    
    
            "type": "cppbuild",
            "label": "compile",
            "command": "/usr/bin/g++-5",
            "args": [
                "-g",
                "-std=c++11",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
    
    
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        }
    ]
}

负责组织文件进行编译,生成可执行文件。其作用可以类比Makefile文件或qt的pro文件,因此编译选项和编译工具的选择都在此处进行。

编译工具的参数:command

主要的坑在于,当前系统中是否有多个g++编译器,如果只有一个,则只需把command选项配置为"command": “g++”,如果存在多个,则需要类似"command": "/usr/bin/g+±5"把编译器路径和名称写对,查看编译器版本方法如下:

sudo update-alternatives --query g++

可以得到如下的结果。

freja@freja-virtual-machine:~$ sudo update-alternatives --query g++
Name: g++
Link: /usr/bin/g++
Status: manual
Best: /usr/bin/g++-5
Value: /usr/bin/g++-5

Alternative: /usr/bin/g++-5
Priority: 60

Alternative: /usr/local/bin/g++
Priority: 50

从上述结果可以看到/usr/bin/g+±5的优先级数为60,大于/usr/local/bin/g++的优先级数50,因此当前系统默认编译器为/usr/bin/g+±5。
如果在command中指定的编译器与系统默认编译器不同则会出现可以编译运行,但是没有办法在断点处停下(命中断点,单步调试)。因此保持command的编译器与系统编译器一致是命中断点的关键。

编译选项的参数:args

除此之外,调试也是需要在编译选项args上增加-g,-g是进行调试的基本选项
如果需要用到c++11的特性需要在编译选项上增加-std=c++11,以此类推可以得到c++14或者c++17的特性。

"args": [
    "-g",
    "-std=c++11",
    "${file}",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}"
],

生成文件名

args最后一个参数为目标文件名,为了可以和launch.json文件配套使用,请务必保证tasks.json的args的最后一个参数和launch.json的program参数保持一致。
fileBasenameNoExtension为目标文件去掉后缀的名字。
fileDirname为当前文件所在文件夹的地址
${fileDirname}/${fileBasenameNoExtension}的组合可以使得生成的目标文件名与main函数的所在文件的名字一致(无后缀)

单文件编译与多文件编译

单文件:"${file}",
多文件:"*.cpp",

"args": [
    "-g",
    "-std=c++11",
    "*.cpp",
    "-o",
    "${fileDirname}/${fileBasenameNoExtension}"
],

PS:关于多版本g++安装和版本选择请参考我的另一篇文章。
g++11编译安装

猜你喜欢

转载自blog.csdn.net/sinat_21699465/article/details/119186091