我最近一直在使用GDB來除錯一個C 程式。 對于標準用法,我通常這樣做:
$ cd compiledir
$ compilescript
$ gdb compiled.out
$ run inputfile
compilescript是一個為我正在進行的特定軟體編譯代碼的程式,只在compiledir中作業。 它讀取一個外部檔案來獲取編譯器標志。 對于gdb,我包括必要的-g標志。 這對我來說是通過文本界面進行除錯的。 然而,與IDE相比,這個文本界面的使用越來越令人沮喪,我知道Visual Studio默認使用gdb作為除錯C 檔案的后端。
為了開始作業,我讓 Visual Studio 生成了默認的 C 除錯配置,并試圖改變命令,但我不知道它在做什么,而且似乎沒有多少關于制作自定義構建/除錯配置的檔案,尤其是對于 VScode 的 linux 版本。
目前我有:
launch.json(默認)
{
// 使用IntelliSense來了解可能的屬性。
// 懸停來查看現有屬性的描述。
// 欲了解更多資訊,請訪問:https://go.microsoft.com/fwlink/?linkid=830387
"版本": "0.2.0",
"配置"。[
{
"name": "g - 建立和除錯活動檔案"。
"型別": "cppdbg"。
"請求": "啟動"。
"程式": "${fileDirname}/${fileBasenameNoExtension}"。
"args": [],
"stopAtEntry": false。
"cwd": "${fileDirname}"。
"環境": [],
"externalConsole": false。
"MIMode": "gdb",
"setupCommands": [
{
"description": "啟用gdb的pretty-printing"。
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C : g build active file"。
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
tasks.json
{
"任務"。[
{
"型別": "cppbuild",
"標簽": "自定義構建"。
"命令": "compilescript" ,
"選項": {
"cwd": "compiledir"
},
"problemMatcher": [
"$gcc"
],
"組"。{
"kind": "build",
"isDefault": true
},
"詳情": "使用自定義構建腳本進行編譯。"
}
],
"版本": "2.0.0"
}
運行該任務和通過launch.json檔案間接運行該任務都失敗了。 我得到的結果如下:
> 執行任務。Custom Build<
開始構建...
而且它掛在那里。 我試著把echo放到構建命令中,看看它是否正在運行,或者讓它創建一個檔案。 然而,好像根本就沒有運行,我看不到任何列印或檔案被創建。
為 Visual Studio(Linux 版)創建自定義 GDB 構建/除錯任務的正確方法是什么?
Update 我已經編輯了tasks.json和launch.json,并且能夠成功地編譯和運行GDB與我想要的輸入檔案。 然而,環境變數的配置并不正確。 我需要環境變數的配置來正確運行輸入檔案。我目前有:
launch.json
{
"版本"。"0.2.0",
"配置"。[
{
"name": "g - 建立和除錯活動檔案"。
"型別": "cppdbg"。
"請求": "啟動"。
"program": compiled.out,
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}"。
"環境": [{"var1": "var1_value", "var2": "var2_value"}]。
"externalConsole": false,
"MIMode": "gdb"。
"setupCommands": [
{
"description": "啟用gdb的pretty-printing"。
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C : g build active file"。
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
然而,當我運行構建/除錯任務時,它構建了,但沒有除錯,而且GDB抱怨說有錯誤。 似乎 "環境 "變數正在設定什么,但我得到了以下錯誤:
無法開始除錯。來自命令"-interpreter-exec console "set env "的意外的GDB輸出。 需要引數(環境變數和值)。
uj5u.com熱心網友回復:
這就是你如何在C 中設定除錯而不使用任何任務擴展。只需要launch.json檔案即可。
首先,用除錯標志編譯你的程式。-g,并把它放在你的檔案夾中的任何地方。
例如,在你的活動檔案夾(或你當前打開的作業區檔案夾)中,我們假設只有你的源代碼存在
Program.cpp
# 其他檔案...
使用-g標志編譯你的程式并創建一個可執行檔案,如圖所示:
gcc -g Program.cpp -o a.out
如果你的編譯成功,可執行檔案a.out將在檔案夾中被創建,而你的根檔案夾將看起來像
a.out
程式.cpp
# 其他檔案...
接下來,你需要創建你的launch.json檔案。由于你沒有使用任何任務擴展,你可以選擇默認配置,這將創建上述檔案,大多數屬性都填入其默認值。
現在將 launch.json 中的程式路徑編輯為該可執行檔案的路徑。我還看到,在某些 Linux 作業系統上,VS Code 的 C 除錯器有一個錯誤,不能與內部控制臺一起作業。所以你可能還需要把 "外部控制臺 "選項設定為true
。在這種情況下,你要在你的 launch.json 檔案中做兩個編輯,即
"配置"。[
{
#.... 其他東西
"program": "${fileDirname}/a.out"。
#.... 其他內容
"externalConsole": true。
#.... 其他內容
}
]
}
這就是你需要的一切。在你的程式中設定斷點,并使用除錯面板中的按鈕開始除錯。一個外部控制臺視窗將彈出,運行你的程式,并且斷點應該是有效的。
另外,如果你是除錯的新手,請記住,每次你改變你的源代碼(Program.cpp在本例中),你將需要再次編譯和構建你的可除錯的可執行檔案。如果你不這樣做,你的除錯就會出現故障。
編輯:
我看到你想添加環境變數。我有一種直覺,你做錯了什么?
在我看來,你想設定兩個變數,以便
VAR1 = VAR1_VALUE
var2 = var2_value
你在launch.json檔案中的這個語法是不正確的。它應該如圖所示:
#... 其他內容
"cwd": "${fileDirname}"。
"環境":
[
{
"name": "VAR1", "value": "VAR1_VALUE"
},
{
"name": "VAR2", "值": "VAR2_VALUE"
}
],
"externalConsole": false,
#... 其他東西
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/316551.html
標籤:
