
1、給C/C++調試器配置launch.json
-
launch.json
用於在VS Code中配置調試器;帶着關於生成器幾乎所有需要的信息。 -
需要將用於計划調試的可執行文件的路徑填充在program字段;必須在launch和attach配置信息中填充。
-
生成的文件包含兩個部分,一個為launch配置調試,一個為attach配置調試。
2、配置VS Code的調試行為
- 調試期間可以通過設置和改變下列選項來控制VS Code的行為:
-
program:指定執行debugger的完整路徑。
-
symbolSearchPath:告訴windows調試器搜索
.pdb
文件的路徑。如果有多個路徑,則用分號分開,例如:C:\\Symbols;C:\\SymbolDir2
。 -
additionalSOLibSearchPath:告知GDB或者LLD去搜索
.so
文件的路徑。如果有多個路徑,用;
隔開。-
GDB:UNIX及UNIX-like下的調試工具。
-
LLDB:LLDB是個開源的內置於XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安裝C++或者Python插件。LLDB是個開源的內置於XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安裝C++或者Python插件。
-
-
externalConsole
-
windows:如果設置為
True
,它將生成外部控制台;如果設置為false
,則將會使用VS Code的集成終端; -
Linux:如果設置為
True
,它將通知VS Code去生成一個外部控制台;如果設置為false
,則將會使用VS Code的集成終端;
-
-
avoidWindowsConsoleRedirection:為了在Windows上支持VSCode與gdb的集成終端,擴展將控制台重定向命令添加到debuggee的參數中,以便在集成終端中顯示控制台輸入和輸出。將此選項設置為
true
將禁用它。 -
logging:可選標志,以確定應該將哪些類型的消息記錄到調試控制台。
-
exceptions:默認為
true
,確定是否應該將異常消息記錄到調試控制台。 -
moduleLoad:默認為
true
,確定是否應該將模塊加載事件記錄到調試控制台。 -
programOutput:默認為
true
,確定是否應該將程序輸出記錄到調試控制台。 -
engineLogging:默認為
false
,確定是否應該將診斷引擎日志記錄到調試控制台。 -
trace:默認為
false
,確定是否應該將診斷適配器命令跟蹤記錄到調試控制台。 -
traceResponse:默認為
false
,確定是否應該將診斷適配器命令和響應跟蹤記錄到調試控制台。
-
-
visualizerFile:調試時
.natvls
文件將被使用。 -
showDisplayString:當指定visualizerFile時,showDisplayString將啟用顯示字符串,打開此選項會導致調試期間性能下降。
舉例:
{
"name": "C++ Launch (Windows)",
"type": "cppvsdbg",
"request": "launch",
"program": "C:\\app1\\Debug\\app1.exe",
"symbolSearchPath": "C:\\Symbols;C:\\SymbolDir2",
"externalConsole": true,
"logging": {
"moduleLoad": false,
"trace": true
},
"visualizerFile": "${workspaceRoot}/my.natvis",
"showDisplayString": true
}
3、配置目標應用
下列選項可讓你在目標應用程式啟動時修改其狀態:
-
args:啟動程序時傳遞給程序的命令行參數的JSON數組。例如 ["arg1", "arg2"],如果要轉義字符,則需要對其進行兩次轉義。例如["{\"arg\": true}]將向您的應用程序發送{"arg1": true}。
-
cwd:設置調試器啟動的應用程序的工作目錄。
-
enviroment:要添加到程序環境中的環境變量。
舉例:
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/a.out",
"args": ["arg1", "arg2"],
"environment": [{"name": "squid", "value": "clam"}],
"cwd": "${workspaceRoot}"
}
4、自定義GDB或者LLDB
下列選項可讓你改變GDB或者LLDB的行為:
-
MIMode:指示VS代碼將連接到的調試器。必須設置為gdb或lldb。這是根據每個操作系統預先配置的,可以根據需要進行更改。
-
miDebuggerPath:調試器(如gdb)的路徑。當只指定可執行文件時,它將為調試器搜索操作系統的路徑變量(Linux和Windows上的GDB, OS X上的LLDB)。
-
miDebuggerArgs:傳遞給調試器的其他參數(如gdb)。
-
stopAtEntry:如果設置為true,調試器應該在目標的入口點停止(在附加時忽略)。默認值為false。
-
setupCommands:要執行的命令的JSON數組,以便設置GDB或LLDB。例如:"setupCommands": [{"text": "target-run", "description": "run target", " ignorefailure ": false}]
-
customLaunchSetupCommands:如果提供了,這將用一些其他命令替換用於啟動目標的默認命令。例如,這可以是“-target-attach”以便附加到目標進程。空命令列表將用空命令替換啟動命令,如果將啟動選項作為命令行選項提供給調試器,這將非常有用。例如:“customLaunchSetupCommands”:[{“text”:“target-run”,“description”:“run target”,“ignorefailure”:false}]。
-
launchCompleteCommand:調試器完全設置好后要執行的命令,以便使目標進程運行。允許的值是“執行器運行”、“執行器繼續”、“None”。默認值是“execl -run”。
舉例:
{
"name": "C++ Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/a.out",
"stopAtEntry": false,
"customLaunchSetupCommands": [
{ "text": "target-run", "description": "run target", "ignoreFailures": false }
],
"launchCompleteCommand": "exec-run",
"linux": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb"
},
"osx": {
"MIMode": "lldb"
},
"windows": {
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe"
}
}
5、調試dump(轉儲)文件
C/ c++擴展允許調試Windows上的dump文件以及Linux和OS X上的core dump文件
-
dumpPath:如果要調試Windows轉儲文件,請將此設置為轉儲文件的路徑,以便在啟動配置中啟動調試。
-
coreDumPath:要調試指定程序的核心轉儲文件的完整路徑。將其設置為核心轉儲文件的路徑,以便在啟動配置中啟動調試。注意:MinGw不支持核心轉儲調試。
6、遠程調試或者本地服務器上調試
-
miDebuggerServerAddress:調試器服務器(例如gdbserver)的網絡地址,以便連接到遠程調試(例如:localhost:1234)。
-
debugServerPath:調試服務器啟動的完整路徑。
-
debugServerArgs:調試服務器的參數。
-
serverStarted:要在調試服務器輸出中查找的服務器啟動模式。
-
serverLaunchTimeout:調試器等待debugServer啟動的時間(以毫秒為單位)。默認是10000。
7、其他屬性
-
processId:默認為
${command.pickProcess}
。將顯示調試器可以附加到的可用進程列表。建議保留此默認值,但是可以顯式地將該屬性設置為調試器要附加到的特定進程ID。 -
request:指示配置節是打算啟動程序還是附加到已運行的實例。
-
targetArchitecture:由於自動檢測到目標體系結構,因此不再需要此選項。
-
type:指示正在使用的底層調試器。使用Visual Studio Windows調試器時必須是cppvsdbg,使用GDB或LLDB時必須是cppdbg。這將在啟動時自動設置為正確的值。創建json文件。
-
sourceFileMap:這允許將源的編譯時路徑映射到本地源位置。它是鍵/值對的對象,將解析第一個字符串匹配的路徑。(例如:"sourceFileMap": {"/mnt/c": "c:\"}將映射調試器返回的以/mnt/c開頭的任何路徑,並將其轉換為c:\。對象中可以有多個映射,但它們將按提供的順序處理。)
參考:
1.官網:https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
2.csdn博客:https://blog.csdn.net/wzxlovesy/article/details/76708151