linux (ubuntu)下 用vs code 調試 c++程序


曾經多次學習在ubuntu下用vs code調試c++程序,最終都因各種原因以失敗而告終。迫不得已,昨天下定決心再次嘗試,最終終於成功了。這裏想做一個簡單的記錄。

PS:不得不吐槽一下網上各種教程,多數都是直接複製別人的,根本沒有更據自己的實踐對教程做一定的修改或補充說明。



首先,需要安裝vs code 裏面的c/c++插件,並且通過終端命令:sudo apt-get install build-essential  安裝各種依賴。


其次,添加調試配置文件:launch.json。添加好調試配置文件後,(只)需要將其中的(兩處)“program”節點修改爲“"${workspaceRoot}/編譯文件名"。編譯文件名是你對源文件進行編譯後生成的編譯文件的名稱,例如下面的”Test.out“。最終編譯出來的編譯文件的名稱也可以不帶後綴”out"。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceRoot}/Test.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "linux": {
                "MIMode": "gdb",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ]
            }
        },
        {
            "name": "C++ Attach",
            "type": "cppdbg",
            "request": "attach",
            "program": "${workspaceRoot}/Test.out",
            "processId": "${command:pickProcess}",

配置好調試配置文件後,按 F5 進行調試會出錯,因爲還沒有生成編譯文件。調試是針對編譯文件調試的,沒有編譯文件當然無法進行調試。有兩中方式生成編譯文件:1.通過在終端輸入命令進行編譯生成編譯文件。   2.先配置好編譯配置文件,然後通過快捷鍵進行編譯。

 個人傾向於第一種,因爲通常情況下,我們都是先編譯生成編譯文件再執行編譯文件,只有在編譯時出錯但無法直接找到錯誤原因 或者 能順利編譯,但執行結果與預期不符時纔會進行調試。這樣,編譯和執行都可以直接在終端上輸入命令一氣呵成。若採用第二種方式,通過按快捷鍵編譯後,依然需要在終端輸入命令進行執行。下面我會將兩種方式都做一個說明。


其一,通過在終端輸入命令進行編譯生成編譯文件。


vs code自身就集成了終端,且其會自動cd 到了當前源文件所在文件目錄,而不需要去打開系統終端,再輸入cd命令。這點可以說非常方便。

假設對源文件“Test.cpp”進行編譯,那麼編譯命令就是:“g++ -g Test.cpp -o Test.out”。其中“Test.out”是編譯文件名,可以任意自定義。例如,如果想編譯文件名不帶“out”後綴名“,那麼編譯命令就是:”g++ -g Test.cpp -o Test” 。

如果想對兩個源文件聯合編譯,例如兩個源文件分別爲:“Test.cpp”和“Array.cpp”,此外當然應該還有一個自定義頭文件,假設爲“Test.h"。那麼編譯命令就是:“g++ -g Test.cpp Array.cpp -o Test.out"。

關於如何寫編譯命令,這裏不再贅述。不過,值得注意的是,編譯命令中一定要帶 “-g" 的參數,否則無法對編譯文件進行調試(“-g" 參數作用是在編譯的時候,產生調試信息)。



其二,通過按快捷鍵Ctrl+Shift+B進行編譯


首先同樣需要配置 編譯配置文件。在vs code界面,按快捷鍵 Ctrl + Shift + P,然後在跳出的輸入框內輸入”tasks“,然後點擊選擇第一個選項(即:任務:配置任務運行程序),然後 選擇 ”其他“。這樣就會生成一個”task.json“的文件。將其修改爲如下圖表示(可以忽略註釋信息):

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "0.1.0",
    "command": "g++",                //這裏將”echo"修改爲“g++"
    "isShellCommand": true,
    "args": [                               //這裏是編譯參數,和 編譯命令 中參數一一對應就行了                        
        "-g",                               //生成調試信息
        "${workspaceRoot}/Test.cpp",	    //源文件一
        "${workspaceRoot}/Array.cpp",       //源文件二(可省略)
        "-o",                               //編譯參數
        "${workspaceRoot}/Test.out"         //生成的目標文件(編譯文件),其名字要與調試配置文件:launch.json中的名字相同
    ],
    "showOutput": "always"
}


配置好後,按快捷鍵Ctrl+Shift+B 就可以對源文件進行編譯並生成編譯文件。這裏,同樣要注意的是:源文件的路徑上不能有中文名(例如,在ubuntu系統中源文件就不能放在 桌面 文件 圖片 等中文名的文件下),否則即便成功生成了編譯文件,在調試時也會出現 "找不到...文件" 的錯誤提示。



這樣,正常情況下,先對源文件打上斷點,然後通過上面其中一種方式生成編譯文件後,就可以按 F5 順利進入調試了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章