Visual Studio Code (VSCode) 之 C/C++ 调试配置详解
準(zhǔn)備
??默認(rèn)情況下,VSCode僅僅內(nèi)置了對(duì)node.js運(yùn)行時(shí)的調(diào)試支持,只可以直接調(diào)試JavaScript、TypeScript和任何其他翻譯為JavaScript的語(yǔ)言。其他語(yǔ)言的調(diào)試支持,都是以插件的形式提供支持。為了能夠調(diào)試C/C++,必須首先安裝插件:ms-vscode.cpptools。直接在VSCode的插件庫(kù)中安裝即可。
 ??C/C++插件是負(fù)責(zé)與VSCode的調(diào)試規(guī)約打交道的,實(shí)際的調(diào)試必須有對(duì)應(yīng)的調(diào)試器。目前在Windows下,VSCode支持GDB、LLDB、VC調(diào)試器。
調(diào)試配置
??首先下載DGB環(huán)境。下載MinGW-w64(目前最新版為 5.01)。下載后將bin目錄添加到環(huán)境變量中。如下圖:
 
 也可以選擇MinGW或者Cygwin。
VSCode的調(diào)試使用起來(lái)很簡(jiǎn)單,如下圖所示:
 
 ??VSCode的特色之一就是原生支持在線調(diào)試功能。VSCode 提供了兩種調(diào)試方式:Launch和Attach。因此,在自動(dòng)生成的配置文件中,這兩種方式都會(huì)有。使用者需要那種配置哪一種即可,當(dāng)然可以都配置好。這里,我們選擇C++(GDB/LLDB)之后,VSCode會(huì)自動(dòng)生成lanuch.json的文件,如下:
接下來(lái)對(duì)配置文件進(jìn)行詳細(xì)說(shuō)明。配置文件分為兩大部分:launch配置 和 attach配置。分別針對(duì)VSCode的兩種調(diào)試方式。
vscode-cpptools調(diào)試參數(shù)詳解
注意:以下為官方文檔的翻譯。
配置VSCode的調(diào)試行為
設(shè)置或更改以下選項(xiàng)以在調(diào)試期間控制 VSCode 的行為:
 **program:**需要調(diào)試的程序(必須為完整程序路徑,可以使用VSCode的環(huán)境變量)
 symbolSearchPath: 告訴Visual Studio Windows Debugger搜索符號(hào)(.pdb)文件的路徑。 用分號(hào)分隔多個(gè)路徑。
 additionalSOLibSearchPath: 告訴GDB或LLDB搜索.so文件的路徑。 用分號(hào)分隔多個(gè)路徑。
 externalConsole: 如果設(shè)置為true,則為應(yīng)用程序啟動(dòng)外部控制臺(tái)。 如果為false,則不會(huì)啟動(dòng)控制臺(tái),并使用VS Code的內(nèi)置調(diào)試控制臺(tái)。 請(qǐng)注意,由于技術(shù)原因,在某些情況下會(huì)忽略此選項(xiàng)。
logging: 可選標(biāo)志,用于確定應(yīng)將哪些類型的消息記錄到調(diào)試控制臺(tái)
- exceptions:用于確定異常消息是否應(yīng)記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為true。
- moduleLoad: 用于確定模塊加載事件是否應(yīng)記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為true。
- programOutput: 用于確定程序輸出是否應(yīng)記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為true。
- engineLogging: 用于確定診斷引擎日志是否應(yīng)記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為false。
- trace: 用于確定是否應(yīng)將診斷適配器命令跟蹤記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為false。
- traceResponse: 用于確定是否應(yīng)將診斷適配器命令和響應(yīng)跟蹤記錄到調(diào)試控制臺(tái)的可選標(biāo)志。 默認(rèn)為false。
visualizerFile: 調(diào)試時(shí)使用.natvis 文件. 使用方法參見(jiàn) Natvis syntax reference
showDisplayString: 當(dāng)指定visualizerFile時(shí),showDisplayString將啟用顯示字符串。 打開(kāi)此選項(xiàng)可能會(huì)導(dǎo)致調(diào)試期間性能下降。
Example:
{"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" }配置目標(biāo)應(yīng)用程序
以下選項(xiàng)使您能夠在啟動(dòng)時(shí)修改目標(biāo)應(yīng)用程序的狀態(tài)
args: 啟動(dòng)時(shí)傳遞給程序的命令行參數(shù)的JSON數(shù)據(jù)。例如: ["arg1", "arg2].
cwd: 設(shè)置調(diào)試器啟動(dòng)的應(yīng)用程序的工作目錄。
environment: 針對(duì)調(diào)試的程序,要添加到環(huán)境中的環(huán)境變量. 例如: [ { "name": "squid", "value": "clam" } ]。注意:如果不使用必須刪除,否則產(chǎn)生錯(cuò)誤
Example:
{"name": "C++ Launch","type": "cppdbg","request": "launch","program": "${workspaceRoot}/a.out","args": ["arg1", "arg2"],"environment": [{"name": "squid", "value": "clam"}],"cwd": "${workspaceRoot}" }自定義GDB或LLDB
您可以通過(guò)設(shè)置以下選項(xiàng)來(lái)更改GDB或LLDB的行為。
MIMode: 指示VS代碼將連接到的調(diào)試器。 必須設(shè)置為gdb或lldb。這是基于每個(gè)操作系統(tǒng)預(yù)配置的,可以根據(jù)需要進(jìn)行更改。
miDebuggerPath: 調(diào)試器的路徑(必須是完整路徑)。 當(dāng)未指定時(shí),它將搜索操作系統(tǒng)的PATH變量來(lái)尋找調(diào)試器(Linux和Windows上的GDB,OS X上的LLDB)。
stopAtEntry: 如果設(shè)置為true,調(diào)試器應(yīng)該在目標(biāo)的入口點(diǎn)停止(在attach方式時(shí)忽略)。 默認(rèn)值為false。
setupCommands: 設(shè)置GDB或LLDB的命令的JSON數(shù)組。 例如:"setupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
customLaunchSetupCommands: If provided, this replaces the default commands used to launch a target with some other commands. For example, this can be “-target-attach” in order to attach to a target process. An empty command list replaces the launch commands with nothing, which can be useful if the debugger is being provided launch options as command line options. Example: "customLaunchSetupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
launchCompleteCommand: 完成調(diào)試器設(shè)置后執(zhí)行的命令,以便使目標(biāo)進(jìn)程運(yùn)行。 允許的值為“exec-run”,“exec-continue”,“None”。 默認(rèn)值為“exec-run”。
Example:
{"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"} }調(diào)試dump files
C / C ++擴(kuò)展可以調(diào)試Windows上的dump files和Linux和OS X上的core dump files
dumpPath: 如果要調(diào)試Windows的dump files,請(qǐng)將其設(shè)置為dump files的路徑以在啟動(dòng)配置中啟動(dòng)調(diào)試。
coreDumpPath: 指定程序調(diào)試的core dump files的完整路徑。 將其設(shè)置為核心轉(zhuǎn)儲(chǔ)文件的路徑,以在啟動(dòng)配置中啟動(dòng)調(diào)試。
core dump調(diào)試不受MinGw支持。
使用本地調(diào)試器服務(wù)器進(jìn)行遠(yuǎn)程調(diào)試或本地調(diào)試
miDebuggerServerAddress: 用于遠(yuǎn)程調(diào)試的要連接的調(diào)試器服務(wù)器(例如gdbserver)的網(wǎng)絡(luò)地址(例如:localhost:1234)。
debugServerPath: 調(diào)試服務(wù)器啟動(dòng)的完整路徑。
debugServerArgs: 調(diào)試器服務(wù)器的參數(shù)。
serverStarted: Server-started pattern to look for in the debug server output.
serverLaunchTimeout: 調(diào)試器等待debugServer啟動(dòng)的時(shí)間(以毫秒為單位)。 默認(rèn)值為10000。
其他屬性
processId: 默認(rèn)為$ {command.pickProcess},它將顯示調(diào)試器可以附加到的可用進(jìn)程的列表。 建議保留此默認(rèn)值,但可以將屬性顯式設(shè)置為調(diào)試器附加到的特定進(jìn)程ID。
request: 指示配置部分是要“啟動(dòng)”程序還是“附加”到已經(jīng)運(yùn)行的實(shí)例。
targetArchitecture: Deprecated 不再需要此選項(xiàng),自動(dòng)檢測(cè)到目標(biāo)體系結(jié)構(gòu)。
type: 指示正在使用的底層調(diào)試器。 在使用Visual Studio Windows調(diào)試器時(shí)必須是“cppvsdbg”,在使用GDB或LLDB時(shí)必須是“cppdbg”。 在創(chuàng)建launch.json文件時(shí),會(huì)自動(dòng)設(shè)置為正確的值。
注意:
關(guān)于VSCode編譯源碼
??VSCode用于強(qiáng)大的Task。VSCode的調(diào)試器定義了大量的參數(shù),其中就包括使用preLaunchTask:task名參數(shù)調(diào)用指定的任務(wù)。在制定了該參數(shù)后,直接啟動(dòng)調(diào)試會(huì)出現(xiàn)以下提示:
 
 點(diǎn)擊Configure Task Runner后,會(huì)出現(xiàn)以下界面:
 
 隨便選一個(gè)即可!然后,VSCode會(huì)自動(dòng)生成名為T(mén)ask.json的文件,修改如下即可:
關(guān)于VSCode的Task的詳細(xì)說(shuō)明,參見(jiàn)官方文檔。
 關(guān)于VSCode的Debugging的詳細(xì)說(shuō)明,參見(jiàn)官方文檔。
調(diào)試
來(lái)到調(diào)試界面,運(yùn)行調(diào)試如下:
 
參考
vscode-cpptools
總結(jié)
以上是生活随笔為你收集整理的Visual Studio Code (VSCode) 之 C/C++ 调试配置详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: FreeRTOS 之二 Tracealy
- 下一篇: PC-lint使用说明
