vscode 在windows下使用gcc+mingw調(diào)試 c/c++程序

這里將介紹配置Visual Studio Code以使用GCC C ++編譯器(g ++)和GDB調(diào)試器來創(chuàng)建和調(diào)試在Windows上運行的程序。

  1. 安裝VS Code的C/C++擴展??梢酝ㄟ^在擴展視圖中搜索“c++”來安裝C/C++擴展(Ctrl+Shift+X)。
image1.png
  1. 通過MSYS2獲取最新版本的Mingw-w64,該軟件提供了GCC,Mingw-w64和其他有用的C++工具和庫的最新本地版本??梢詮腗SYS2頁面下載最新的安裝程序,或使用此鏈接到安裝程序

  2. 按照MSYS2網(wǎng)站上的Installation說明安裝Mingw-w64。

  3. 安裝Mingw-w64工具鏈(pacman -S --needed base-devel mingw-w64-x86_64-toolchain)。在MSYS2終端中運行pacman命令。接受默認(rèn)值以安裝toolchain組中的所有成員。

  4. 使用以下步驟將Mingw-w64的bin文件夾的路徑添加到Windows的PATH環(huán)境變量中:例如路徑:C:\\msys64\\mingw64\\bin

檢查您的MinGW安裝

要檢查您的Mingw-w64工具是否正確安裝并可用,請打開一個msys2命令的終端提示符并鍵入:

gcc --version
g++ --version
gdb --version

  1. 如果您沒有看到預(yù)期的輸出或g++gdb不是已識別的命令,請確保您的PATH條目與編譯器所在的Mingw-w64二進(jìn)制位置匹配。如果編譯器不存在于該PATH條目中,請確保您遵循了MSYS2網(wǎng)站上的說明安裝Mingw-w64。
  2. 如果gcc有正確的輸出但gdb沒有,則需要從Mingw-w64工具集中安裝您缺少的軟件包。
    • 缺少mingw-w64-gdb軟件包是嘗試編譯時出現(xiàn)“miDebuggerPath的值無效”的消息的原因之一,如果您的PATH正確,則需要安裝軟件包。

添加 hello world 示例程序

現(xiàn)在粘貼以下源代碼:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg) {
        cout << word << " ";
    }
    cout << endl;
}

運行 helloworld.cpp

  1. 打開 helloworld.cpp,使其成為活動文件。

  2. 單擊編輯器右上角的三角形按鈕。


    image2.png
  1. 從系統(tǒng)檢測到的編譯器列表中選擇C/C++:g++.exe build and debug active file。
image3.png

只有在第一次運行 helloworld.cpp 時才會要求您選擇編譯器。此編譯器將作為“默認(rèn)”編譯器設(shè)置在 tasks.json 文件中。

  1. 構(gòu)建成功后,程序的輸出將出現(xiàn)在集成的終端中。
    image4.png

第一次運行程序時,C++ 擴展將創(chuàng)建 tasks.json,可以在項目的 .vscode 文件夾中找到它。tasks.json 存儲構(gòu)建配置。

新 tasks.json 文件應(yīng)類似于以下 JSON:

{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe build active file",
      "command": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe"
      ],
      "options": {
        "cwd": "${fileDirname}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ],
  "version": "2.0.0"
}

Debug調(diào)試

調(diào)試跟vscode使用其他調(diào)試工具沒什么差別,

  • 如設(shè)置斷點的行,再運行Debug。
image5.png

使用launch.json自定義調(diào)試

使用播放按鈕或F5進(jìn)行調(diào)試時,C ++擴展會即時創(chuàng)建動態(tài)調(diào)試配置。

有些情況下,你希望自定義調(diào)試配置,例如指定在運行時傳遞給程序的參數(shù)??梢栽?code>launch.json文件中定義自定義調(diào)試配置。

要創(chuàng)建launch.json,請從以下設(shè)置中選擇“添加調(diào)試配置”。

image6.png

然后,將看到各種預(yù)定義的調(diào)試配置的下拉列表。選擇C/C++: g++.exe build and debug active file。

image7.png

VS Code將創(chuàng)建一個名為launch.json的文件,其外觀類似于以下內(nèi)容:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: g++.exe build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\gdb.exe",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: g++.exe build active file"
    }
  ]
}

在上面的 JSON 中,program指定您想要調(diào)試的程序。在此,它設(shè)置為活動文件夾(${fileDirname})和具有.exe擴展名的活動文件名稱(${fileBasenameNoExtension}.exe),如果helloworld.cpp是活動文件,則為helloworld.exe。args屬性是要在運行時傳遞給程序的參數(shù)數(shù)組。

默認(rèn)情況下,C++擴展不會向您的源代碼添加任何斷點,stopAtEntry的值為false

stopAtEntry的值更改為true,以使調(diào)試器在開始調(diào)試時停在main方法上。

從現(xiàn)在開始,播放按鈕和F5將從您的launch.json文件中讀取,以便在進(jìn)行調(diào)試時啟動程序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容