关于在Ubuntu环境下的VSCode上配置【运行和调试】环境,实现了C语言的单步调试功能

关于在Ubuntu环境下的VSCode上配置【运行和调试】环境,实现了C语言的单步调试功能

起因

本意是想在VSCode上配置Debug,实现对已有项目工程make run命令运行后的C语言文件的单步调试,但无果。

因此只能是退而求其次,配置一个测试环境。但因为网上大多数教程并未详细所使用的launch.json及tasks.json配置文件的内含,我找了很多的教程都没有实现成功,因此以此篇blog记录最终的正确功能实现。

配置步骤

  1. 先在需要测试环境的目录下新建一个vscode配置文件夹,名为".vscode",并在其中新建两个json配置文件,分别名为"launch.json"及"tasks.json"。
  2. 将launch.json和tasks.json分别配置如附录中源代码所示。
  3. 在需要运行的C语言程序中打断点后,即可开始单步调试。
    配置文件
    在这里插入图片描述
    在这里插入图片描述

一些思考

关于launch.json与tasks.json的关系

vscode进行调试前,即当你在【运行与调试】中点了绿色的三角标后▶️,应该会运行并解析launch.json,而launch.json中有两个配置是需要注意的–“program"和"preLaunchTask”。

因为调试本身其实也是借用gdb进行的debug,因此本质上也是代码实现的,我们所进行的图形化操作最终都转化为了cmd命令形式。

而"program"指的是最后我们gdb调试的文件(一般是通过gcc xxx.c -o xxx)生成的那个可执行文件,因此如果最后想调试生成的文件命名为xxx.out,可以将此项修改为"${fileDirname}/${fileBasenameNoExtension}.out",这都是没关系的。

而"preLaunchTask"指的是在launch执行前所做的工作,也就是我们在tasks.json中配置的内容,因此此处的内容要与tasks.json内的"label"相对应,否则将会报错。
在这里插入图片描述
tasks.json中需要注意"args"项,此处即指的是tasks.json的"cmd"项内容的参数,因此如果需要做些额外的操作,直接通过修改"command"项及"args"项即可,甚至可以在这个地方实现一些攻击(滑稽🤪,就和跨站脚本攻击一样哈哈哈)。

我是因为正在学习"readline"库,而该库的编译需要动态链接,也正是因此我在"args"末尾加上了"-lreadline"参数,否则会报错。
在这里插入图片描述

关于未来

我总觉得应该是能够实现通过配置文件,然后针对一个工程(工程包含了很多很多.c程序,平常是使用make统一编译的)里单步调试,但是调研后发现cmake tools好像也不是以此为目标的,希望未来可以找到问题的解决方法吧!

附录源代码

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",
            "preLaunchTask": "compile",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json内容如下:

{
    "version": "2.0.0",
    "tasks": [{
            "label": "compile",
            "command": "gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-lreadline",
            ],
            "problemMatcher": {
                "owner": "cpp",
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

参考链接

Linux / Ubuntu上使用vscode编译运行和调试C/C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值