1. 程式人生 > >Dev Envirenment - VS Code && C++ && MinGW

Dev Envirenment - VS Code && C++ && MinGW

pdb set echo 應用 UNC ive 進入 ignore lena

之所以寫這個中文檔,是因為官方文檔是英文的,並且有些地方沒說明白...(可能是我太小白了...)

1. 安裝 C++ 編譯器

  • 安裝MinGW-W64 (註意:Architecture選擇符合自己CPU的版本)
  • 添加系統環境變量(註意:需要重啟)

2. 安裝 C/C++ 擴展

  • 安裝 VS Code
  • 安裝 C/C++ 擴展
  • 重啟軟件

3. 創建工作區

VS Code 有工作區的的概念,你可以在硬盤中準備一個目錄,然後通過 File -> Open Folder... 打開它。
我們可以將每個工作區都設置成獨立的編輯環境。

4. 智能感知和頭文件

  • 打開命令選項板(Ctrl+Shift+P)
  • 選擇C/Cpp: Edit Configurations...,打開c_cpp_properties.json配置文檔
{
    "configurations": [{
        "name": "MinGW",
        "intelliSenseMode": "gcc-x64",
        "compilerPath": "D:/MinGW/mingw64/bin/x86_64-w64-mingw32-gcc.exe",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "includePath": [
            "${workspaceFolder}/**",
            "D:/MinGW/mingw64/x86_64-w64-mingw32/include",
            "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
            "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/tr1"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE",
            "__GNUC__=7",
            "__cdecl=__attribute__((__cdecl__))"
        ],
        "browse": {
            "path": [
                "${workspaceFolder}/**",
                "D:/MinGW/mingw64/x86_64-w64-mingw32/include",
                "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
                "D:/MinGW/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/tr1"
            ],
            "limitSymbolsToIncludedHeaders": true,
            "databaseFilename": ""
        }
    }],
    "version": 4
}

5. 編譯任務

  • 打開命令選項板(Ctrl+Shift+P)
  • 選擇Tasks: Configure Task -> Create tasks.json file from templates -> Others
{
    // 有關 tasks.json 格式的參考文檔:https://go.microsoft.com/fwlink/?LinkId=733558 。
    "version": "2.0.0",
    "tasks": [{
        "label": "Compile",
        "type": "shell", // { shell | process }
        // 適用於 Windows 的配置:
        "windows": {
            "command": "gcc",
            "args": [
                "-g",
                "\"${file}\"",
                "-o",
                "\"${fileDirname}\\${fileBasenameNoExtension}.exe\""
                // 設置編譯後的可執行文件的字符集為 GB2312:
                // "-fexec-charset", "GB2312"
                // 直接設置命令行字符集為 utf-8:
                // chcp 65001
            ]
        },
        // 定義此任務屬於的執行組:
        "group": {
            "kind": "build", // { build | test }
            "isDefault": true // { true | false }
        },
        // 定義如何在用戶界面中處理任務輸出:
        "presentation": {
            // 控制是否顯示運行此任務的面板。默認值為 "always":
            // - always:    總是在此任務執行時顯示終端。
            // - never:     不要在此任務執行時顯示終端。
            // - silent:    僅在任務沒有關聯問題匹配程序且在執行時發生錯誤時顯示終端
            "reveal": "silent",
            // 控制面板是否獲取焦點。默認值為 "false":
            "focus": false,
            // 控制是否將執行的命令顯示到面板中。默認值為“true”:
            "echo": false,
            // 控制是否在任務間共享面板。同一個任務使用相同面板還是每次運行時新創建一個面板:
            // - shared:     終端被共享,其他任務運行的輸出被添加到同一個終端。
            // - dedicated:  執行同一個任務,則使用同一個終端,執行不同任務,則使用不同終端。
            // - new:        任務的每次執行都使用一個新的終端。
            "panel": "dedicated"
        },
        // 使用問題匹配器處理任務輸出:
        "problemMatcher": {
            // 代碼內問題的所有者為 cpp 語言服務。
            "owner": "cpp",
            // 定義應如何解釋問題面板中報告的文件名
            "fileLocation": [
                "relative",
                "${workspaceFolder}"
            ],
            // 在輸出中匹配問題的實際模式。
            "pattern": {
                // The regular expression.
                "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                // 第一個匹配組匹配文件的相對文件名:
                "file": 1,
                // 第二個匹配組匹配問題出現的行:
                "line": 2,
                // 第三個匹配組匹配問題出現的列:
                "column": 3,
                // 第四個匹配組匹配問題的嚴重性,如果忽略,所有問題都被捕獲為錯誤:
                "severity": 4,
                // 第五個匹配組匹配消息:
                "message": 5
            }
        }
    }]
}
  • 現在可以使用“Ctrl+Shift+B”來構建程序了

5. 調試(Debug)

  • 從側邊欄的Debug圖標進入Debug視圖
  • 點擊Configure圖標
  • 選擇C++ (GDB/LLDB)
{
    "version": "0.2.0",
    "configurations": [{
        // 配置 VS Code 調試行為:
        "name": "GDB Debug", // 設置在啟動配置下拉菜單中顯示調試配置的名稱。
        "preLaunchTask": "Compile", // 調試會話開始前要運行的任務。
        "type": "cppdbg", // 設置要使用的基礎調試器。使用 GDB 或 LLDB 時必須是 cppdbg 。
        "request": "launch", // 設置啟動程序還是附加到已經運行的實例。啟動或附加 ( launch | attach ).
        "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 調試器將啟動或附加的可執行文件的完整路徑。
        "externalConsole": true, // 設置是否顯示外部控制臺。
        "logging": { // 用於確定應該將哪些類型的消息記錄到調試控制臺。
            "exceptions": true, // 是否應將異常消息記錄到調試控制臺。默認為真。
            "moduleLoad": false, // 是否應將模塊加載事件記錄到調試控制臺。默認為真。
            "programOutput": true, // 是否應將程序輸出記錄到調試控制臺的可選標誌。默認為真。
            "engineLogging": false, // 是否應將診斷引擎日誌記錄到調試控制臺。默認為假。
            "trace": false, // 是否將診斷適配器命令跟蹤記錄到調試控制臺。默認為假。
            "traceResponse": false // 是否將診斷適配器命令和響應跟蹤記錄到調試控制臺。默認為假。
        },
        // 配置目標應用程序:
        "args": [], // 設置調試時傳遞給程序的命令行參數。
        "cwd": "${workspaceFolder}", // 設置調試器啟動的應用程序的工作目錄。
        "environment": [], // 設置調試時添加到程序環境中的環境變量,例如: [ { "name": "squid", "value": "clam" } ]。
        // 自定義 GDB 或者 LLDB:
        "windows": {
            "MIMode": "gdb", // 指定 VS Code 連接的調試器,必須為 gdb 或者 lldb。
            "miDebuggerPath": "D:/MinGW/mingw64/bin/gdb.exe" // 調試器的路徑,修改為你的安裝路徑
        },
        "miDebuggerArgs": "", // 傳遞給調試器的附加參數
        "stopAtEntry": false, // 設置調試器是否停止在目標的入口(附加時忽略)。默認值為 false。
        "setupCommands": [{ // 執行下面的命令數組以設置 GDB 或 LLDB
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing", // 鼠標懸停查看變量的值,需要啟用 pretty-printing 。
            "ignoreFailures": true // 忽略失敗的命令,默認為 false 。
        }]
    }]
}

Dev Envirenment - VS Code && C++ && MinGW