vscode插件之C/C++



1、給C/C++調試器配置launch.json

  • launch.json用於在VS Code中配置調試器;帶着關於生成器幾乎所有需要的信息。

  • 需要將用於計划調試的可執行文件的路徑填充在program字段;必須在launch和attach配置信息中填充。

  • 生成的文件包含兩個部分,一個為launch配置調試,一個為attach配置調試。

2、配置VS Code的調試行為

  • 調試期間可以通過設置和改變下列選項來控制VS Code的行為:
  1. program:指定執行debugger的完整路徑。

  2. symbolSearchPath:告訴windows調試器搜索.pdb文件的路徑。如果有多個路徑,則用分號分開,例如:C:\\Symbols;C:\\SymbolDir2

  3. 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插件。

  4. externalConsole

    • windows:如果設置為True,它將生成外部控制台;如果設置為false,則將會使用VS Code的集成終端;

    • Linux:如果設置為True,它將通知VS Code去生成一個外部控制台;如果設置為false,則將會使用VS Code的集成終端;

  5. avoidWindowsConsoleRedirection:為了在Windows上支持VSCode與gdb的集成終端,擴展將控制台重定向命令添加到debuggee的參數中,以便在集成終端中顯示控制台輸入和輸出。將此選項設置為true將禁用它。

  6. logging:可選標志,以確定應該將哪些類型的消息記錄到調試控制台。

    • exceptions:默認為true,確定是否應該將異常消息記錄到調試控制台。

    • moduleLoad:默認為true,確定是否應該將模塊加載事件記錄到調試控制台。

    • programOutput:默認為true,確定是否應該將程序輸出記錄到調試控制台。

    • engineLogging:默認為false,確定是否應該將診斷引擎日志記錄到調試控制台。

    • trace:默認為false,確定是否應該將診斷適配器命令跟蹤記錄到調試控制台。

    • traceResponse:默認為false,確定是否應該將診斷適配器命令和響應跟蹤記錄到調試控制台。

  7. visualizerFile:調試時.natvls文件將被使用。

  8. 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、配置目標應用

下列選項可讓你在目標應用程式啟動時修改其狀態:

  1. args:啟動程序時傳遞給程序的命令行參數的JSON數組。例如 ["arg1", "arg2"],如果要轉義字符,則需要對其進行兩次轉義。例如["{\"arg\": true}]將向您的應用程序發送{"arg1": true}。

  2. cwd:設置調試器啟動的應用程序的工作目錄。

  3. 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的行為:

  1. MIMode:指示VS代碼將連接到的調試器。必須設置為gdb或lldb。這是根據每個操作系統預先配置的,可以根據需要進行更改。

  2. miDebuggerPath:調試器(如gdb)的路徑。當只指定可執行文件時,它將為調試器搜索操作系統的路徑變量(Linux和Windows上的GDB, OS X上的LLDB)。

  3. miDebuggerArgs:傳遞給調試器的其他參數(如gdb)。

  4. stopAtEntry:如果設置為true,調試器應該在目標的入口點停止(在附加時忽略)。默認值為false。

  5. setupCommands:要執行的命令的JSON數組,以便設置GDB或LLDB。例如:"setupCommands": [{"text": "target-run", "description": "run target", " ignorefailure ": false}]

  6. customLaunchSetupCommands:如果提供了,這將用一些其他命令替換用於啟動目標的默認命令。例如,這可以是“-target-attach”以便附加到目標進程。空命令列表將用空命令替換啟動命令,如果將啟動選項作為命令行選項提供給調試器,這將非常有用。例如:“customLaunchSetupCommands”:[{“text”:“target-run”,“description”:“run target”,“ignorefailure”:false}]。

  7. 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文件

  1. dumpPath:如果要調試Windows轉儲文件,請將此設置為轉儲文件的路徑,以便在啟動配置中啟動調試。

  2. coreDumPath:要調試指定程序的核心轉儲文件的完整路徑。將其設置為核心轉儲文件的路徑,以便在啟動配置中啟動調試。注意:MinGw不支持核心轉儲調試。

6、遠程調試或者本地服務器上調試

  1. miDebuggerServerAddress:調試器服務器(例如gdbserver)的網絡地址,以便連接到遠程調試(例如:localhost:1234)。

  2. debugServerPath:調試服務器啟動的完整路徑。

  3. debugServerArgs:調試服務器的參數。

  4. serverStarted:要在調試服務器輸出中查找的服務器啟動模式。

  5. serverLaunchTimeout:調試器等待debugServer啟動的時間(以毫秒為單位)。默認是10000。

7、其他屬性

  1. processId:默認為${command.pickProcess}。將顯示調試器可以附加到的可用進程列表。建議保留此默認值,但是可以顯式地將該屬性設置為調試器要附加到的特定進程ID。

  2. request:指示配置節是打算啟動程序還是附加到已運行的實例。

  3. targetArchitecture:由於自動檢測到目標體系結構,因此不再需要此選項。

  4. type:指示正在使用的底層調試器。使用Visual Studio Windows調試器時必須是cppvsdbg,使用GDB或LLDB時必須是cppdbg。這將在啟動時自動設置為正確的值。創建json文件。

  5. 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

https://blog.csdn.net/g19zwk/article/details/78414226


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM