在 VSCode 中使用 GDB 進行 C/C++ 程序調試(圖文版)

  • (??? ),Hello我是祐言QAQ
  • 我的博客主頁:C/C++語言,數據結構,Linux基礎,ARM開發板,網絡編程等領域UP🌍
  • 快上🚘,一起學習,讓我們成為一個強大的攻城獅!
  • 送給自己和讀者的一句雞湯🤔:集中起來的意志可以擊穿頑石!
  • 作者水平很有限,如果發現錯誤,請在評論區指正,感謝🙏

引言

????????在軟件開發過程中,調試是不可或缺的一部分。C/C++ 開發者常常使用 GDB 進行調試,而在 Visual Studio Code中集成 GDB 可以提供一種高效、直觀的調試體驗。本文將為你詳細介紹如何在 VS Code 中配置和使用 GDB 進行 C/C++ 調試,并解答一些常見問題。

一. 安裝 VSCode 插件

????????首先,確保你已經在 VSCode 中安裝了 C/C++ 和 GDB Debug插件,如果沒有安裝,可以在 Extensions 視圖(左側四個方塊)中搜索 "C/C++" 和“GDB Debug” 并分別進行安裝(Install),該插件提供了強大的代碼編輯和調試功能。

二. 配置 GDB

????????在配置 GDB 之前,確保你已經安裝了 GDB 調試器。然后,在 VSCode 中創建一個 launch.json 文件以配置調試環境。或者直接點擊運行調試就會彈出配置該文件的提示。

? ? ? ? 打開后默認長這樣,當然是不行的,所以點擊右下角的Add Configuration...

? ? ? ? 然后選擇你需要的類型:

? ?或者復制如下代碼直接粘貼進去亦可:

{"version": "0.2.0","configurations": [{"name": "C++ Debug","type": "cppdbg","request": "launch","program": "${workspaceFolder}/your_executable", //${workspaceFolder}是路徑除執行文件外其他"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}", //這里也一樣"environment": [],        //環境有則需要配置,無則無需管"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build"}]
}

? ? ? ? 但要確保替換 "your_executable" 為你的可執行文件的路徑。這個配置會告訴 VSCode 使用 GDB 進行調試。

三. 基本調試命令

在 VSCode 的調試視圖中

????????你可以使用一系列基本調試命令,如:

  • Breakpoints(break): 在源代碼中設置斷點,以便在程序執行到這些地方時停下來;
  • Run(F5): 啟動程序;
  • Continue(continue): 恢復程序執行,直到下一個斷點;
  • Step Into(F11): 逐行進入函數內部;
  • Step Over(F10): 逐行執行當前函數,不進入函數內部;
  • Step Out(Shift+F11)?: 從當前函數中跳出,繼續執行到函數返回的地方;
  • Stop(Shift+F5):?停1止調試;

終端使用命令行方式調試

? ? ? ? 啟動GDB的方式一般為:?gdb <你的可執行文件名>,還有如下的幾種:

1.調試core文件:
//用于調試一個運行程序和core文件,core文件是程序非法執行后core dump產生的文件
gdb <program> core  2.使用GDB “attach”到一個正在運行的服務程序上去,并調試它:
gdb <program> <PID>
或者:
gdb attach <PID>

????????主要的步驟詳細說明一下,其他的自己摸索一下就會了,具體步驟如下:

1.運行(毫無設置的run)

2. 設置斷點(在運行之前設置)

????????設置斷點是調試的關鍵步驟之一。在源代碼中點擊行號旁邊,或者通過命令行使用 break 命令設置斷點(第十行),還可以在指定模塊和函數前設置斷點,禁用斷點和刪除斷點等。

3. 逐行運行

????????這里主要說一下step和next的區別:

  • step 命令: 逐行執行程序,進入函數內部;

  • next 命令: 逐過程執行程序,不進入函數內部。

4.backtrace 使用

? ? ? ? 在GDB調試中,有時候會出現報錯Segmentation fault,該報錯是因為出現了內存錯誤,我們就可使用 backtrace 命令來追溯問題出在哪一步,當然這個問題一般出現時就會提示錯誤在哪一行,但我們可以通過該命令來回溯其之前調用的地方逐個檢查問題,方便更快找出。

5. 常見錯誤解決????????

? ? ? ?一般來說,配置好之后點擊“運行和調試”,右上角就會出現該綠色三角,點擊之后報錯讓你修改?launch.json 文件 那么說明你的該文件中存在語法上的錯誤或缺失某行,照著檢查一下即可,一定要注意路徑的/是否加全。

????????在 VSCode 中,GDB 的集成提供了直觀的調試工具。你可以查看變量、觀察寄存器狀態等。通過調試視圖,你可以更輕松地導航和掌握程序執行的每個步驟。

????????除了基本的調試命令外,GDB 還提供了一些高級技巧,如查看內存、觀察程序狀態等。深入了解這些功能可以幫助你更全面地調試代碼。一般來說兩種GDB使用方式配合調試是最好的,它們在不同的地方有各自的亮點和作用。

四、結語????????

????????通過本文的指南,希望將能夠在 VSCode 中配置和使用 GDB 進行 C/C++ 程序的高效調試。調試是編程中的一項重要技能,善用調試工具可以提高代碼質量,加速開發周期。

????????更多C/C++語言Linux系統數據結構ARM板實戰相關文章,關注專欄:

? ?手撕C語言

? ? ? ? ? ? 玩轉linux

????????????????????腳踢數據結構

? ? ? ? ? ? ? ? ? ? ? ? ? ? 系統、網絡編程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?探索C++

??? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? 6818(ARM)開發板實戰

📢寫在最后

  • 今天的分享就到這啦~
  • 覺得博主寫的還不錯的煩勞?一鍵三連喔~
  • 🎉🎉🎉感謝關注🎉🎉🎉

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

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

相關文章

webpack loader

1、分類 2、執行順序 配置類型 執行順序是 loader1>loader2>loader3 3、使用方式 自己的第一個loader 同步loader /*** loader 就是一個函數* 當webpack 解釋資源時&#xff0c; 會調用相應的loader去處理* loader 接收到文件內容作為參數&#xff0c;返回文件內容* p…

Nginx 開源版安裝

下載 tar.gz安裝包&#xff0c;上傳。 解壓 [rootlocalhost ~]# tar zxvf nginx-1.21.6.tar.gz nginx-1.21.6/ nginx-1.21.6/auto/ nginx-1.21.6/conf/ nginx-1.21.6/contrib/ nginx-1.21.6/src/ ... ...安裝gcc [rootlocalhost nginx-1.21.6]# yum install -y gcc 已加載插件…

ios qt開發要點

目前關于ios qt的開發資料比較少&#xff0c;這里整理了幾個比較重要的開發要點&#xff0c;基于MacOS14 Xcode15 Qt15.5 cmake iphone真機。 cmake報錯&#xff0c;報錯信息如下 CMake Error at /Users/user/Qt/5.15.5/ios/lib/cmake/Qt5Core/Qt5CoreConfig.cmake:91 (m…

C#Wpf關于日志的相關功能擴展

目錄 一、日志Sink(接收器) 二、Trace追蹤實現日志 三、日志滾動 一、日志Sink(接收器) 安裝NuGet包&#xff1a;Serilog Sink有很多種&#xff0c;這里介紹兩種&#xff1a; Console接收器&#xff08;安裝Serilog.Sinks.Console&#xff09;; File接收器&#xff08;安裝…

CSM32RV003:國產高精度16位ADC低功耗RISC-V內核MCU

目錄 高精度ADC工業應用工業數據采集應用CSM32RV003簡介主要特性 高精度ADC工業應用 高精度ADC即高精度模數轉換器&#xff0c;是一種能夠將輸入模擬信號轉換為數字信號的芯片&#xff0c;在多種消費電子、工業、醫療和科研領域都有廣泛應用。高精度ADC的主要特點是能夠提供高…

深度學習圖像修復算法 - opencv python 機器視覺 計算機競賽

文章目錄 0 前言2 什么是圖像內容填充修復3 原理分析3.1 第一步&#xff1a;將圖像理解為一個概率分布的樣本3.2 補全圖像 3.3 快速生成假圖像3.4 生成對抗網絡(Generative Adversarial Net, GAN) 的架構3.5 使用G(z)生成偽圖像 4 在Tensorflow上構建DCGANs最后 0 前言 &#…

前端 HTML 的 DOM 事件相關知識有哪些?

HTML 的 DOM 事件是指在網頁上發生的各種事件&#xff0c;如點擊、鼠標移動、鍵盤輸入等。 通過 JavaScript 腳本可以對這些事件進行監聽和處理&#xff0c;以實現交互效果。以下是一些常見的 DOM 事件及其相關知識點&#xff1a; 1、click&#xff1a;點擊事件&#xff0c;在…

vue3引入vuex基礎

一&#xff1a;前言 使用 vuex 可以方便我們對數據的統一化管理&#xff0c;便于各組件間數據的傳遞&#xff0c;定義一個全局對象&#xff0c;在多組件之間進行維護更新。因此&#xff0c;vuex 是在項目開發中很重要的一個部分。接下來讓我們一起來看看如何使用 vuex 吧&#…

linux文件I/O:文件鎖的概念、函數以及代碼實現

文件鎖是一種用來保證多個進程對同一個文件的安全訪問的機制。文件鎖可以分為兩種類型&#xff1a;建議性鎖和強制性鎖。建議性鎖是一種協作式的鎖&#xff0c;它只有在所有參與的進程都遵守鎖的規則時才有效。強制性鎖是一種強制式的鎖&#xff0c;它由內核或文件系統來強制執…

使用Pytorch從零開始構建RNN

在這篇文章中&#xff0c;我們將了解 RNN&#xff08;即循環神經網絡&#xff09;&#xff0c;并嘗試通過 PyTorch 從頭開始??實現其中的部分內容。是的&#xff0c;這并不完全是從頭開始&#xff0c;因為我們仍然依賴 PyTorch autograd 來計算梯度并實現反向傳播&#xff0c…

Apache訪問控制

服務器相關的訪問控制 Options指令 Options指令是Apache服務器配置文件中的一個重要指令,它可以用于控制特定目錄啟用哪些服務器特性。Options指令可以在Apache服務器的核心配置、虛擬主機配置、特定目錄配置以及.htaccess文件中使用。 以下是一些常用的服務器特性選項: N…

Django(九、cookie與session)

文章目錄 一、cookie與session的介紹HTTP四大特性 cookiesession Django操作cookie三板斧基于cookie的登錄功能 一、cookie與session的介紹 在講之前我們先來回憶一下HTTP的四大特性 HTTP四大特性 1.基于請求響應 2.基于TIC、IP作用于應用層上的協議 3.無狀態 保存…

二叉查找(排序)樹你需要了解一下

簡介 二叉排序樹&#xff08;Binary Sort Tree&#xff09;&#xff0c;又稱二叉查找樹&#xff08;Binary Search Tree&#xff09;&#xff0c;亦稱二叉搜索樹&#xff0c;是一種重要的數據結構。 它有以下特性&#xff1a; 若左子樹不空&#xff0c;則左子樹上所有結點的…

目標檢測YOLO系列從入門到精通技術詳解100篇-【圖像處理】目標檢測

目錄 幾個高頻面試題目 如何在超大分辨率的圖片中檢測目標? 1當超大分辨率圖像邂逅目標檢測任務 2You Only Look Twice

邊緣計算多角色智能計量插座 x 資產顯示標簽:實現資產追蹤與能耗管理的無縫結合

越來越多智慧園區、智慧工廠、智慧醫院、智慧商業、智慧倉儲物流等企業商家對精細化、多元化智能生態應用場景的提升&#xff0c;順應國家節能減排、環保的時代潮流&#xff0c;設計一款基于融合以太網/WiFi/藍牙智能控制的智能多角色插座應運而生&#xff0c;賦予智能插座以遙…

大數據學習(23)-hive on mapreduce對比hive on spark

&&大數據學習&& &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 承認自己的無知&#xff0c;乃是開啟智慧的大門 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一下博主哦&#x1f91…

uniapp實現表單彈窗

uni.showModal({title: 刪除賬戶,confirmColor:#3A3A3A,cancelColor:#999999,confirmText:確定,editable:true,//顯示content:請輸入“delete”刪除賬戶,success: function (res) {console.log(res)if(res.confirm){if(res.contentdelete){console.log(123123123213)uni.setSto…

PCIE鏈路訓練-狀態跳轉1

A&#xff1a;12ms超時&#xff0c;或者再任何lane上檢測到Electrical Idle Exit&#xff1b; B&#xff1a; 1.發送“receiver detection”之后沒有一個lane的接收邏輯被rx檢測到 2.不滿足條件c&#xff0c;比如兩次detection出現差別&#xff1b; C&#xff1a;發送端在沒…

凸優化基礎與應用

諸神緘默不語-個人CSDN博文目錄 文章目錄 1. 線性規劃用SciPy求解 2. 二次規劃3. 半定規劃4. 錐規劃 凸優化是數學優化的一個重要分支&#xff0c;廣泛應用于各種工程和科學領域。它的核心特征在于優化問題的目標函數和約束條件是凸的&#xff0c;這使得找到全局最優解變得可行…

Ps:背景橡皮擦工具摳圖實例

背景橡皮擦工具 Background Eraser Tool由于是一個破壞性的工具&#xff08;直接刪除像素&#xff09;而少被人使用。 其實&#xff0c;它不僅是一個功能強大的摳圖工具&#xff0c;也是可以轉換為非破壞性運用的。 原圖&#xff08;注&#xff1a;圖片來自網絡&#xff09; 效…