天天看點

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫

tasks用于在launch前執行任務,launch用于讀取執行檔案。

這兩者經常組合起來用于需要編譯語言的自動編譯+自動執行,下面以C++、​​Rust​​和​​Typescript​​為例。

程式

工作區包含main.cpp、頭檔案夾include以及檔案夾中的h檔案、src檔案夾以及檔案夾中的cpp檔案。

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫

.​​vscode​​是後面生成的,不用管。

在swap.h檔案中對類進行了聲明,在swap對類進行了定義,然後在面函數中使用類。

swap.h檔案

#pragma once
#include<iostream>
using  namespace std;
class Swap
{
    public:
        Swap(int a, int b){
            this->_a = a;
            this->_b = b;
        }
        void run();
        void printInfo();
 
        private:
            int _a;
            int _b;
};      

 swap.cpp

#include "swap.h"
 
void Swap::run(){
    int temp;
    temp = _a;
    _a = _b;
    _b = temp;
}
void Swap::printInfo()
{
    cout << "_a = " << _a << endl;
    cout << "_b = " << _b << endl;
}      

 main.cpp

#include <iostream>
#include "swap.h"
 
int main()
{
    Swap myswap(10, 20);
    myswap.printInfo();
    myswap.run();
    myswap.printInfo();
    cout << "After swap" << endl;
    return 0;
}      

調試

run->g++

遇到的問題及解決方式

1.最開始是使用g++指令能夠成功執行程式,但是使用VSCode就報錯,即h檔案沒有包含;

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫

解決方式:

在tasks.json檔案的args參數中加上圖中方框中的指令,注意前一句需要加上逗号!

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫
"-I",
"${workspaceFolder}/include"      

 2.将頭檔案包含後報錯,對類的成員函數未引用;

重新執行顯示未引用,因為上面的tasks.json檔案隻編譯了main.cpp 沒有編譯swap.cpp

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫

解決方式:

将swap.cpp加到-g指令後就行

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫
"-g",
"${file}", 
"${workspaceFolder}/src/swap.cpp",      

 如果有更多的cpp檔案,也能這樣解決。

拓展

預定義變量#

支援下面的預定義變量:

${workspaceFolder} - 目前工作目錄(根目錄)

${workspaceFolderBasename} - 目前檔案的父目錄

${file} - 目前打開的檔案名(完整路徑)

${relativeFile} - 目前根目錄到目前打開檔案的相對路徑(包括檔案名)

${relativeFileDirname} - 目前根目錄到目前打開檔案的相對路徑(不包括檔案名)

${fileBasename} - 目前打開的檔案名(包括擴充名)

${fileBasenameNoExtension} - 目前打開的檔案名(不包括擴充名)

${fileDirname} - 目前打開檔案的目錄

${fileExtname} - 目前打開檔案的擴充名

${cwd} - 啟動時task工作的目錄

${lineNumber} - 目前激活檔案所選行

${selectedText} - 目前激活檔案中所選擇的文本

${execPath} - vscode執行檔案所在的目錄

${defaultBuildTask} - 預設編譯任務(build task)的名字

預定義變量示例:

假設你滿足以下的條件

  1. 一個檔案​

    ​/home/your-username/your-project/folder/file.ext​

    ​ 在你的編輯器中打開;
  2. 一個目錄​

    ​/home/your-username/your-project​

    ​ 作為你的根目錄.

下面的預定義變量則代表:

${workspaceFolder} - /home/your-username/your-project

${workspaceFolderBasename} - your-project

${file} - /home/your-username/your-project/folder/file.ext

${relativeFile} - folder/file.ext

${relativeFileDirname} - folder

${fileBasename} - file.ext

${fileBasenameNoExtension} - file

${fileDirname} - /home/your-username/your-project/folder

${fileExtname} - .ext

${lineNumber} - 光标所在行

${selectedText} - 編輯器中所選擇的文本

${execPath} - Code.exe的位置

Tip: vscode的智能提示會在 tasks.json和 launch.json 提示所有支援的預定義變量.      

=================================================

目錄:

【轉載】 Ubuntu下使用VSCode的launch.json及tasks.json編寫

.vscode/task.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++-7 生成活動檔案",
            "command": "/usr/bin/g++-7",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${workspaceFolder}/main.cpp",
                "${workspaceFolder}/src/swap.cpp",
                "-o",
                "${workspaceFolder}/mainX",
                "-I",
                "${workspaceFolder}/include"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "調試器生成的任務。"
        }
    ],
    "version": "2.0.0"
}      
{
    // 使用 IntelliSense 了解相關屬性。 
    // 懸停以檢視現有屬性的描述。
    // 欲了解更多資訊,請通路: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++-7 - 生成和調試活動檔案",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/mainX",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊列印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++-7 生成活動檔案",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}