Vscode -- 调试C的多文件工程配置

关于Vscode的C语言的单文件调试,可以参见VScode调试C语言的设置(win10,Linux),里面已经说明基本的配置和使用。

下面说明一下如何调试多个文件的工程,首先写一个简单的工程,其中工程目录如下图1所示。

图1 工程目录结构

文件的结构也特别简单,就是在每一个文件夹下放置两个文件,一个为xxx.c的文件,一个为xxx.h的文件,这么存放文件的好处就是:结构比较清楚,对于已经完成的demo文件,也更加方便移植。

在Linux环境下,如果不适用Vscode进行仿真调试,则可以使用Makefile一键完成编译或者使用GDB调试,那么对于上图这种目录结构的工程,Makefile可以这么写点我送你直达!

首先,对于add.c,内容如下

#include "sub.h"

int sub(int a, int b)
{
    return a + b;
}

对于add.h文件,内容如下

#ifndef __ADD_H__
#define __ADD_H__


int add(int a, int b);

#endif

对于其他的几个文件,都是按照这种形式编写,只不过完成的就是简单的加减乘除的功能。

关于main.c的内容

#include "stdio.h"
#include "./add/add.h"
#include "./sub/sub.h"
#include "./mul/mul.h"
#include "./dev/dev.h"

int main(int argc, const char **argv)
{
    int a = 10, b = 2;

    printf("a + b = %d\r\n", add(a, b));
    printf("a - b = %d\r\n", sub(a, b));
    printf("a * b = %d\r\n", mul(a, b));
    printf("a / b = %d\r\n", dev(a, b));
    
    getchar();
    
    return 0;
}

就上面的工程,在win10下选择调试之后,出现效果如图2所示。

图2 win10下调试的效果

在Linux系统下(ubuntu),调试的效果如图3所示。

图3 Linux(Ubuntu)下的调试的效果

效果已经看到了,那么下面,简单说明一下调试的配置文件了。

1、launch.json文件可以详见点我!点我!就是我!

2、tasks.json文件

根据GCC编译的参数的选择,我们在实际的编译过程需要将main.c中包含的xxx.h文件和xxx.c源文件包含到GCC的编译参数中,即:

图4 Vscode中命令编译示意

那么,在tasks.json中关于GCC编译的参数可以这样写:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build", // 任务名称,与launch.json的preLaunchTask相对应
            "command": "gcc", // 要使用的编译器
            "args": [
                "${file}", //在哪个文件的视图上选择仿真,则选择哪个文件
                "${fileDirname}/add/add.c",
                "${fileDirname}/sub/sub.c",
                "${fileDirname}/mul/mul.c",
                "${fileDirname}/dev/dev.c",  
                "-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
                "${fileDirname}/${fileBasenameNoExtension}.exe",//选择输出的文件名称,和前面的${file}是对应的,一般默认的名称就是前面的${file}.exe
                "-g", // 生成和调试有关的信息
                "-Wall", // 开启额外警告
            ], // 编译命令参数
            "type": "shell", // 可以为shell或process,前者相当于先打开shell再输入命令,后者是直接运行命令
            "group": {
                "kind": "build",
                "isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件
            },
            "presentation": {
                "echo": true,
                "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
                "focus": false, // 设为true后可以使执行task时焦点聚集在终端
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
        }
    ]
}

可以看到,在开始调试时候(win10环境下),在终端会打印出编译的命令,如图5所示。

图5 终端打印的信息 

如果按照上述的的tasks.json配置完成后,还不能够正常调试。则可以按照在终端打印出来的信息来编辑tasks.json中下面的这些信息:

"${fileDirname}/add/add.c",
"${fileDirname}/sub/sub.c",
"${fileDirname}/mul/mul.c",
"${fileDirname}/dev/dev.c",       

 

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
在使用VSCode调试包含多个Makefile的C++项目之前,需要先确保已安装以下工具: 1. C/C++插件 2. Make工具 3. GDB调试器 接下来,按照以下步骤进行操作: 1. 打开C++项目所在的文件夹,按下F5或者点击左侧调试栏中的“启动调试”按钮。 2. 在弹出的“选择环境”窗口中,选择“C++ (GDB/LLDB)”环境,然后点击“创建配置文件”。 3. 在打开的“launch.json”文件中,添加以下配置: ``` { "name": "Debug Multi Makefile Project", "type": "cppdbg", "request": "launch", "program": "${workspaceRoot}/path/to/executable", "args": [], "stopAtEntry": true, "cwd": "${workspaceRoot}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "/path/to/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "Set breakpoint at main", "text": "break main", "ignoreFailures": true } ], "preLaunchTask": "build" } ``` 其中,需要将“program”字段的值设置为项目生成的可执行文件的路径,将“miDebuggerPath”字段的值设置为GDB调试器的路径,将“setupCommands”字段中的“text”值设置为需要执行的GDB命令,比如“break main”可以在程序开始执行时自动停在main函数处。 4. 在VSCode中打开项目的“tasks.json”文件,在该文件配置需要执行的Makefile命令,比如: ``` { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "make -f makefile1 && make -f makefile2", "group": { "kind": "build", "isDefault": true } } ] } ``` 其中,“command”字段的值为需要执行的Makefile命令,可以包括多个Makefile。 5. 按下F5或者点击左侧调试栏中的“启动调试”按钮,等待程序运行到设置的断点处即可开始调试。 希望这些步骤能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青椒*^_^*凤爪爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值