Visual Studio Code 配置C、C++ 檔案debug除錯環境

駱三瘋發表於2022-02-24

大家好我是SLF,在午休的時候給嵌入式軟體的同事,演示了一下如何用vscode除錯應用端的CPP程式,他之前一直用的是UltraEdit,同事被vscode的外掛除錯功能安利了一波,覺得挺好用的。晚上我抽了個時間,整了個文件,希望也能幫助到大家。

vscode C/C++ Extension Pack 外掛安裝

下載直接安裝 C/C++ Extension Pack 它包含了 vscode 編寫 C/C++ 工程需要的外掛,和以前比不需要一個個找了。

vscode windows 端 debug 配置

windows 端編譯執行C/C++的程式需要一套整合開發環境,這裡可以使用 MinGW https://nuwen.net/mingw.html ,選擇自己需要的安裝包安裝即可,我就直接用推薦的。

window MinGW 環境安裝

  • 下載MinGW的安裝包,安裝即可(當然如果電腦上裝著 Visual Studio,也可以用它的工具集配置環境)。

  • 配置MinGW的bin目錄到系統環境變數。

  • 命令列gcc -v、g++ -v 驗證環境變數是否配置成功

windows 端 C、CPP 單檔案 debug 除錯

安裝好外掛之後,先寫一個簡單的 cpp 檔案

#include <iostream>
using namespace std;

int main()
{
  int number = 100;
  cout << "hello world" << number << endl;
  return 0;
}

打個斷點,直接執行debug,可以讓編輯器自己去建立 lanch.json 和 task.json 配置檔案

這裡選擇C++(GDB/LLDB)、不要用C++(windows),debug執行的是 windows 自帶的 cmd

下一步 選擇 g++.exe 如下截圖;

記住不要用 C++(WIndows) 選項的話,會呼叫的是作業系統的cmd執行去執行程式,無法在vscode中正常debug,嘗試了一下,截圖如下。

注意生成的.vscode目錄,其中配置檔案 lanch.js 中的 preLaunchTask 值,需要和 tasks.json 中 的任務名稱保持一致。對於不同的作業系統可能的其他環境,可以進行多工配置。

C檔案也可以除錯。

我的windows端配置檔案如下,大家可以參考。

// launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "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": "D:\\MinGW\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build active file"
        }
    ]
}
// tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "D:\\MinGW\\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"
}

程式碼檔案中文目錄檔名, 如何在 window 端正常除錯

我是直接將 window 作業系統的編碼改成 UTF-8,測試有效,不過之前磁碟中的的一些不是UTF-8編碼的.txt 等文字檔案,會有亂碼的情況。win10和win11系統 UTF-8 的配置截圖如下。

  • win10

  • win11

  • 重啟電腦後,就可以 debug 中文目錄的單檔案了。

vscode ubuntu端 debug配置

我這裡的系統是Ubuntu20.04 版本,類linux系統當中配置vscode debug相對來說比window端要簡單的多。

ubuntu C、CPP單檔案除錯

建立檔案目錄,寫個簡單測試程式,點選debug 按鈕,可以讓vscode 自己建立 launch.js 和 tasks.json
選擇 C++(GDB/LLDB),參考截圖如下

選擇 gcc - 生成和除錯活動檔案,參考截圖如下

成功進入斷點。

我的ubuntu端配置檔案如下,大家可以參考。

// launch.js
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "gcc - 生成和除錯活動檔案",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊列印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc 生成活動檔案",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}
// tasks.js
{

    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc 生成活動檔案",
            "command": "/usr/bin/gcc",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "偵錯程式生成的任務。"
        }
    ],
    "version": "2.0.0"
}

中文目錄檔名, 在 ubuntu 端正常除錯

在執行,Ubuntu調式中文目錄,中文檔案是沒有問題的, locale 看一下當前系統的語言編碼設定,預設是 UTF-8。

如果不行,可以修改預設配置 sudo vi /etc/default/locale,系統語言是中文,LANG="zh_CN.UTF-8",系統語言是英文的,LANG=“en_US.UTF-8”
完成修改之後可以, source /etc/default/locale 更新配置。截圖如下

官方文件參考

vscode官方文件當中也有相關的配置,大家可以參考。https://code.visualstudio.com/docs/cpp/config-mingw

相關文章