Vscode調試C的多文件工程配置


關於Vscode的C語言的單文件調試,可以參見VScode調試C語言的設置(win10,Linux),里面已經說明基本的配置和使用。

下面說明一下如何調試多個文件的工程,首先寫一個簡單的工程,其中工程目錄如下圖1所示。

​圖1 工程目錄結構

文件的結構也特別簡單,就是在每一個文件夾下放置兩個文件,一個為xxx.c的文件,一個為xxx.h的文件,這么存放文件的好處就是:結構比較清楚,對於已經完成的demo文件,也更加方便移植。

首先,對於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",      

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM