Configure C/C++ debugging

Configure C/C++ debugging

launch.json 文件用于在 Visual Studio Code 中配置調試器。

Visual Studio Code 會生成一個 launch.json (位于項目的 .vscode 文件夾下),其中幾乎包含了所有必需的信息。要開始調試,您需要填寫 program 字段,指定要調試的可執行文件的路徑。這必須同時在 launch 和 attach (如果您計劃隨時附加到正在運行的實例)配置中指定。

生成的文件包含兩個部分,一個配置了 launch 調試,另一個配置了 attach 調試。
在這里插入圖片描述

Configure VS Code’s debugging behavior

設置或更改以下選項以控制 VS Code 在調試期間的行為:

program (必填)
指定調試器將啟動或附加的可執行文件的完整路徑。調試器需要此位置來加載調試符號。

symbolSearchPath
告訴 Visual Studio Windows 調試器在哪里搜索符號 (.pdb) 文件。用分號分隔多個路徑。例如: “C:\Symbols;C:\SymbolDir2”。

requireExactSource
一個可選標志,告訴 Visual Studio Windows 調試器要求當前源代碼與 pdb 完全匹配。

additionalSOLibSearchPath
告訴 GDB 或 LLDB 搜索 .so 文件的路徑。用分號分隔多個路徑。例如: “/Users/user/dir1;/Users/user/dir2”。

在這里插入圖片描述
externalConsole
僅在啟動被調試程序時使用。對于 attach,此參數不會改變被調試程序的行為。

  • Windows: 設置為 true 時,它將生成一個外部控制臺。設置為 false 時,它將使用 VS Code 的 integratedTerminal。
  • Linux: 設置為 true 時,它將通知 VS Code 生成一個外部控制臺。設置為 false 時,它將使用 VS Code 的 integratedTerminal。
  • macOS: 設置為 true 時,它將通過 lldb-mi 生成一個外部控制臺。設置為 false 時,輸出可以在 VS Code 的 debugConsole 中查看。由于 lldb-mi 的限制,不支持 integratedTerminal。
    在這里插入圖片描述

avoidWindowsConsoleRedirection
為了支持在 Windows 上使用 gdb 的 VS Code 集成終端,該擴展會添加控制臺重定向命令到被調試程序的參數,以便將控制臺輸入和輸出顯示在集成終端中。將此選項設置為 true 將禁用它。
在這里插入圖片描述
logging
確定應該將哪種類型的消息記錄到"調試控制臺"的可選標志。

  • exceptions: 確定是否將異常消息記錄到"調試控制臺"的可選標志。默認為 true。
  • moduleLoad: 確定是否將模塊加載事件記錄到"調試控制臺"的可選標志。默認為 true。
  • programOutput: 確定是否將程序輸出記錄到"調試控制臺"的可選標志。默認為 true。
  • engineLogging: 確定是否將診斷引擎日志記錄到"調試控制臺"的可選標志。默認為 false。
  • trace: 確定是否將診斷適配器命令跟蹤記錄到"調試控制臺"的可選標志。默認為 false。
  • traceResponse: 確定是否將診斷適配器命令和響應跟蹤記錄到"調試控制臺"的可選標志。默認為 false。

visualizerFile
在調試時使用的 .natvis 文件。有關如何創建 Natvis 文件的信息,請參見"創建本機對象的自定義視圖"。

showDisplayString
當指定了 visualizerFile 時,showDisplayString 將啟用顯示字符串。打開此選項可能會在調試期間導致性能下降。
在這里插入圖片描述

在這里插入圖片描述

Configure the target application

下面選項可以讓您在啟動目標應用程序時修改其狀態:

args
傳遞給程序的命令行參數的 JSON 數組。例如 [“arg1”, “arg2”]。如果需要轉義字符,則需要進行雙轉義。例如, [“{“arg1”: true}”] 將向應用程序發送 {“arg1”: true}。

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

environment
要添加到程序環境中的環境變量。例如: [ { “name”: “config”, “value”: “Debug” } ], 而不是 [ { “config”: “Debug” } ]。
在這里插入圖片描述
在這里插入圖片描述

Customizing GDB or LLDB

以下是 GDB 或 LLDB 配置選項:

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

miDebuggerPath
調試器(如 gdb)的路徑。僅指定可執行文件時,它將搜索操作系統的 PATH 變量以找到調試器(Linux 和 Windows 上的 GDB,macOS 上的 LLDB)。

miDebuggerArgs
傳遞給調試器(如 gdb)的其他參數。
在這里插入圖片描述

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

stopAtConnect
如果設置為 true,調試器應該在連接到目標后停止。如果設置為 false,調試器將在連接后繼續。默認值為 false。

setupCommands
要按順序執行以設置 GDB 或 LLDB 的 JSON 數組命令。例如: “setupCommands”: [ { “text”: “target-run”, “description”: “run target”, “ignoreFailures”: false }]。
在這里插入圖片描述

customLaunchSetupCommands
如果提供,這將替換用于啟動目標的默認命令,改用其他命令。例如,這可以是 "-target-attach"以附加到目標進程。空命令列表用于替換啟動命令,這在調試器作為命令行選項提供時很有用。例如: “customLaunchSetupCommands”: [ { “text”: “target-run”, “description”: “run target”, “ignoreFailures”: false }]。

launchCompleteCommand
調試器完全設置好后要執行的命令,以使目標進程運行。允許的值為 “exec-run”、“exec-continue”、“None”。默認值為 “exec-run”。
在這里插入圖片描述
在這里插入圖片描述

關于 symbolLoadInfo 的選項:

symbolLoadInfo

loadAll: 如果設置為 true,則會加載所有庫的符號,否則不會加載任何動態共享庫的符號。可由 exceptionList 修改。默認值為 true。
exceptionList: 以分號 ; 分隔的文件名列表(支持通配符)。修改 LoadAll 的行為。如果 LoadAll 為 true,則不會加載與列表中任何名稱匹配的庫的符號。否則只會加載與列表匹配的庫的符號。例如: “foo.so;bar.so”

在這里插入圖片描述

Debugging dump files

C/C++ 擴展程序支持在 Windows 上調試轉儲文件和在 Linux 和 macOS 上調試核心轉儲文件。

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

coreDumpPath
要調試的程序的完整核心轉儲文件路徑。在啟動配置中設置此選項以開始調試核心轉儲。注意:MinGw 不支持核心轉儲調試。
在這里插入圖片描述

Remote debugging or debugging with a local debugger server

遠程調試或使用本地調試器服務器進行調試的相關選項:

miDebuggerServerAddress
用于遠程調試的調試器服務器(如 gdbserver)的網絡地址(例如: localhost:1234)。

debugServerPath
調試服務器的完整路徑。

debugServerArgs
調試器服務器的參數。

serverStarted
在調試服務器輸出中搜索的服務器啟動模式。支持正則表達式。
在這里插入圖片描述

filterStdout
如果設置為 true,則搜索標準輸出流以查找服務器啟動模式,并將標準輸出記錄到調試輸出。默認值為 true。

filterStderr
如果設置為 true,則搜索標準錯誤流以查找服務器啟動模式,并將標準錯誤記錄到調試輸出。默認值為 false。

serverLaunchTimeout
調試器等待調試服務器啟動的時間(以毫秒為單位)。默認值為 10000。

pipeTransport
有關附加到遠程進程(如在 Docker 容器中調試進程)的信息,請參閱 Pipe transport settings 文章。
在這里插入圖片描述

hardwareBreakpoints
如果提供,這將明確控制遠程目標的硬件斷點行為。如果 require 設置為 true,則始終使用硬件斷點。默認值為 false。 limit 是在 require 為 true 且 limit 大于 0 時強制執行的可用硬件斷點數量的可選限制。默認值為 0。示例: “hardwareBreakpoints”: { require: true, limit: 6 }。
在這里插入圖片描述

這些選項允許您配置遠程調試或使用本地調試器服務器進行調試的各種設置,以滿足不同的調試需求。

Additional properties

還有一些其他的屬性可以配置:

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

request
指示配置部分是打算啟動程序還是附加到正在運行的實例。

targetArchitecture
已棄用。此選項不再需要,因為目標體系結構會自動檢測。
在這里插入圖片描述

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

sourceFileMap
這允許將源代碼的編譯時路徑映射到本地源代碼位置。它是一個鍵/值對對象,將解析第一個字符串匹配的路徑。(例如: “sourceFileMap”: { “/mnt/c”: “c:” } 將把調試器返回的任何以 /mnt/c 開頭的路徑映射到 c:\ 。您可以在對象中有多個映射,但它們將按照提供的順序處理。)
在這里插入圖片描述

Environment variable definitions file

環境變量定義文件是一個簡單的文本文件,其中包含以 environment_variable=value 形式的鍵值對,使用 # 進行注釋。不支持多行值。

cppvsdbg 調試器配置還包含一個 envFile 屬性,允許您輕松地為調試目的設置變量。
在這里插入圖片描述

例如:

project.env 文件:
在這里插入圖片描述

Symbol Options

The symbolOptions element allows customization of how the debugger searches for symbols. Example:

在這里插入圖片描述

Properties:

searchPaths: 這是一個數組,包含需要搜索 .pdb 文件的符號服務器 URL 或目錄。這些目錄會被搜索,除了默認位置(模塊旁邊和 pdb 最初被放置的路徑)。
searchMicrosoftSymbolServer: 如果設置為 true,則會將 Microsoft Symbol 服務器 (https://msdl.microsoft.com/download/symbols) 添加到符號搜索路徑。如果未指定,此選項默認為 false。
cachePath: 這是一個目錄,用于緩存從符號服務器下載的符號。如果未指定,調試器將默認使用 %TEMP%\SymbolCache。
在這里插入圖片描述

moduleFilter.mode:

  • “loadAllButExcluded”: 調試器會加載所有模塊的符號,除非該模塊在 ‘excludedModules’ 數組中。
  • “loadOnlyIncluded”: 調試器不會嘗試加載任何模塊的符號,除非該模塊在 ‘includedModules’ 數組中,或通過 ‘includeSymbolsNextToModules’ 設置包含。
    moduleFilter.excludedModules: 在 “loadAllButExcluded” 模式下,這是一個數組,包含調試器不應加載符號的模塊。支持通配符。
    moduleFilter.includedModules: 在 “loadOnlyIncluded” 模式下,這是一個數組,包含調試器應加載符號的模塊。支持通配符。
    moduleFilter.includeSymbolsNextToModules: 如果設置為 true,對于任何不在 ‘includedModules’ 數組中的模塊,調試器仍然會檢查該模塊本身和啟動可執行文件旁邊的位置,但不會檢查符號搜索列表上的路徑。默認為 true。
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/38124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38124.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/38124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何通過流式渲染提升用戶體驗?

什么是流式渲染? 流式渲染的核心理念是將 HTML 文檔分割成小塊(chunk),并逐步地發送給客戶端,而非等待整個頁面完整生成后再進行傳輸。這種方式能夠極大地提升用戶的初始加載體驗,特別是在網絡條件不佳或者…

【從零開始學架構 架構基礎】四 架構設計的復雜度來源:可擴展性復雜度來源

架構設計的復雜度來源其實就是架構設計要解決的問題,主要有如下幾個:高性能、高可用、可擴展、低成本、安全、規模。復雜度的關鍵,就是新舊技術之間不是完全的替代關系,有交叉,有各自的特點,所以才需要具體…

新書速覽|Linux C與C++一線開發實踐

《Linux C與C一線開發實踐》 本書內容 Linux C/C編程在Linux應用程序開發中占有重要的地位,掌握這項技術將在就業競爭中立于不敗之地。《Linux C與C一線開發實踐》內容針對初中級讀者,貼近軟件公司一線開發實踐。全書厚達620多頁,知識點豐富…

Java中String和StringBuilder的區別

當然可以,我們可以通過面試問答的形式來探討String和StringBuilder的區別。 面試官:請解釋一下Java中String和StringBuilder的區別。 面試回答: 1. 不可變性(Immutability) String:String對象是不可變的…

微信小程序添加點擊事件

在微信小程序中&#xff0c;給<view>組件添加點擊事件非常直接&#xff0c;你可以使用bindtap屬性來綁定一個事件處理函數。下面是添加點擊事件的基本步驟和示例代碼&#xff1a; 步驟&#xff1a; 在WXML文件中&#xff1a;給需要添加點擊事件的<view>標簽添加bi…

第六周周報

摘要 本周重點跟著網課學習了pytorch框架下張量的各種常用操作API&#xff0c;為后面跑模型做準備&#xff0c;因為看的視頻比較偏向原理&#xff0c;現在對張量有了一個新的認識。其次在時序的研究上&#xff0c;最近我在看圖神經網絡跟時序結合的方向&#xff0c;所以本周學…

Qt自定義類型

概述 在使用Qt創建用戶界面時&#xff0c;特別是那些具有特殊控件和特性的界面時&#xff0c;開發人員有時需要創建新的數據類型&#xff0c;以便與Qt現有的值類型集一起使用或代替它們。 QSize、QColor和QString等標準類型都可以存儲在QVariant對象中&#xff0c;作為基于qo…

51單片機第6步_stdlib.h庫函數

本章重點學習stdlib.h庫函數。 #include <REG51.h> //包含頭文件REG51.h,使能51內部寄存器; #include <stdlib.h> //float atof (char *s1); //參數s1字符串可包含正負號,小數點或E(e)來表示指數部分,如123.456或123e-2; //若首字符是非數據字符,或為正負號…

es6語法復習一

es6語法 1.var 變量提升 2.let 不存在變量提升&#xff0c;只能定義一次 3.const 先定義再使用&#xff0c;定義好來不能修改 4.解構賦值 [a,b,c][1,2,3],{a,b,c}{a:1,b:2,c:3} 5.模版字符串 let aaa; ${a} is ok 6.對象簡化寫法 const school{ name, change, improve(){ cons…

力扣2438.二的冪數組中查詢范圍內的乘積

力扣2438.二的冪數組中查詢范圍內的乘積 lowbit求所有2的冪 accumulate函數(begin,end,start,way)求和/積的方式求積并取模 const int N 1e9 7;class Solution {public:int lowbit(int x){return x & -x;}vector<int> productQueries(int n, vector<vector&l…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生賽]easyapp(安卓逆向,異或)

無殼 把后綴名改為zip&#xff0c;找到apk 查看jadx 這里調用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又調用了Encoder進行異或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

HarmonyOS開發:應用完整性校驗

簡介 為了確保應用的完整性和來源可靠&#xff0c;OpenHarmony需要對應用進行簽名和驗簽。 應用開發階段&#xff1a; 開發者完成開發并生成安裝包后&#xff0c;需要開發者對安裝包進行簽名&#xff0c;以證明安裝包發布到設備的過程中沒有被篡改。OpenHarmony的應用完整性校…

Foxit Reader與PDF交互性:探索高級功能

引言 PDF&#xff08;Portable Document Format&#xff09;文件格式以其跨平臺的一致性和豐富的多媒體支持而廣受歡迎。Foxit Reader作為一款功能全面的PDF閱讀器&#xff0c;不僅提供了基本的查看和導航功能&#xff0c;還支持PDF文件中的多種交互式元素。本文將深入探討Fox…

SQL Server中 MERGE 語句

在 SQL Server 中,MERGE 語句用于根據兩個表之間的條件來插入、更新或刪除記錄。它通常用于同步兩個表的數據,其中一個表是源表(包含要插入或更新的數據),另一個是目標表(數據要插入或更新的表)。 1、本文內容 語法參數備注觸發器的實現權限有關索引的最佳做法MERGE 的…

探索sklearn的貝葉斯奧秘:樸素貝葉斯分類器全解析

&#x1f680; 探索sklearn的貝葉斯奧秘&#xff1a;樸素貝葉斯分類器全解析 樸素貝葉斯分類器是一類基于貝葉斯定理的簡單概率分類器&#xff0c;它們在文本分類、垃圾郵件識別等領域表現出色。在Python的sklearn庫中&#xff0c;樸素貝葉斯分類器以其實現簡單和效率高效而受…

關于響應式編程的理解與SpringCloudGateway的理解

關于響應式編程的理解與SpringCloudGateway的理解 一. 響應式編程與函數式編程的區別二. 響應式編程中常用的組件2.1 RxJava定義2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常見的四種限流規則 一. 響應式編程與函數式編程的區別 總的來說&#xff0c;響應式編…

qt中的枚舉值-QMetaEnum

QMetaEnum 測試代碼hcpp 講解 測試代碼 h #include <QMainWindow> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~M…

GPIO和PIN

文章目錄 1 GPIO和Pin1.1 GPIO和Pin基礎概念1.2 GPIO輸入模式1.3 GPIO輸出模式1.4 GPIO的HAL庫1.4.1 一些HAL庫表示1.4.2 HAL庫常用GPIO函數1.4.3 GPIO點亮led燈程序例子 1 GPIO和Pin 1.1 GPIO和Pin基礎概念 ? 單片機有很多的引腳&#xff0c;為了操控每一個引腳&#xff0c…

grpc學習golang版( 四、多服務示例 )

系列文章目錄 第一章 grpc基本概念與安裝 第二章 grpc入門示例 第三章 proto文件數據類型 第四章 多服務示例 第五章 多proto文件示例 第六章 服務器流式傳輸 第七章 客戶端流式傳輸 第八章 雙向流示例 文章目錄 一、前言二、定義proto文件三、編寫server服務端四、編寫Client客…

MySQL之可擴展性(九)

可擴展性 直接連接 2.修改應用的配置 還有一個分發負載的辦法是重新配置應用。例如&#xff0c;你可以配置多個機器來分擔生成大報表操作的負載。每臺機器可以配置成連接到不同的MySQL備庫&#xff0c;并為第N個用戶或網站生成報表。 這樣的系統很容易實現&#xff0c;但如果…