【Linux】調試工具gdb的認識和使用指令介紹(圖文詳解)

目錄

1、debug和release的知識

2、gdb的使用和常用指令介紹:

(1)、windows下調試的功能:

(2)、進入和退出:

(3)、調試過程中的相關指令:

3、調試究竟是在干什么?


?前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家

點擊跳轉到網站

1、debug和release的知識

(1)、debug形成的可執行程序會給我們加上調試信息,這部分調試信息也會占用空間,但我們用戶是不需要這些調試信息的,用戶需要更快的下載和安裝,所以debug模式一般是方便開發人員進行調試,而用戶得到的應該是release版本。

(2)、release形成的可執行程序不會給我們調試信息,占用內存較小,所以也是測試人員和用戶得到的版本。

(3)、gcc/g++編譯時默認是release模式,所以直接編譯來的文件是不能用于調試的。

gcc的默認行為:

(1)默認是動態鏈接的

(2)默認是release模式發布的

(4)、如何讓gdb以debug模式發布?

在編譯的時候,使用 -g 命令:

然后使用make,生成可執行文件mybin后,使用指令:

 gdb mybin

這樣就進入了調試模式。如果不加-g選項,生成的可執行文件是release模式,是進不去調試模式的。

(5)、我們分別在debug和release模式下生成可執行文件,發現如下:

會發現debug模式下的可執行文件的文件大小會比release模式下的要大,大的那部分就是增加的調試信息。

2、gdb的使用和常用指令介紹:

(1)、windows下調試的功能:

1、運行起來才能調試;

2、調試的時候需要看到代碼;

3、打斷點功能;

4、可以局部調試;

5、可以看到相關局部變了的內容和地址;

6、可以查看調用堆棧

7、逐語句和逐過程調試;

linux所做的就是需要平替windows里面的功能

(2)、進入和退出:

1、進入:輸入指令gdb或者gdb+可執行文件名,即可進入調試功能;

gdb mybin-2

2、退出:輸入指令 quit

quit

(3)、調試過程中的相關指令:

(1)、l +行號:顯示指定行號之后的代碼:

注意:gdb會自動記錄最近的一條指令,所以上次輸入指令后,直接回車可以繼續執行:

(2)、b+行號/函數名/file:行號 :對指定位置打斷點:

(3)、info? b :查看我們所打的斷點:

(4)、d+斷點編號:刪除該斷點。

注意,這里的斷點編號是我們使用info b指令后,顯示的內容的Num列:?

(5)、disable/enable + 斷點編號:禁用 / 開啟 該斷點;

(6)、n:逐過程調試(相當于F10)

(7)、s:逐語句調試(相當于F11)

(8)、run + [參數]:開始調試,若沒有斷點,則全部運行完,若有斷點,則運行到斷點處,然后就可以進行逐語句和逐過程調試。

若該程序是需要參數輸入的,此時就可以在run后面增加參數,如 run 9,則是把參數9輸入到程序。

(9)、p:顯示變量的內容和地址:

(10)、display 變量名/取地址變量:每調試一步,自動顯示改變量的內容/地址:

(11)、undisplay + 編號:取消第(10)步:

注意,這里的編號是顯示列表中的編號:

(12)、c:從一個斷點運行到下一個斷點(范圍查找)

(13)、finish:將一個函數運行結束,然后停下來(范圍查找一個函數)

(14)、until:在一個范圍內,直接運行到指定行(范圍查找)

(15)、bt:查看調用堆棧

(16)、set var name=value:修改name變量的值,進行分支(如if判斷)測試,不會改變實際變量的值。

3、調試究竟是在干什么?

首先要知道,想調試一個程序,首先需要搞懂它的代碼邏輯,不然是很困難的;

(1)、找到問題(查找、范圍查找局部逐行查找);

(2)、解決問題(配合上下文代碼);

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

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

相關文章

【Pytorch 中的擴散模型】去噪擴散概率模型(DDPM)的實現

介紹 廣義上講,擴散模型是一種生成式深度學習模型,它通過學習到的去噪過程來創建數據。擴散模型有很多變體,其中最流行的通常是文本條件模型,它可以根據提示生成特定的圖像。一些擴散模型(例如 Control-Net&#xff0…

Milvus(3):數據庫、Collections說明

1 數據庫 Milvus 在集合之上引入了數據庫層,為管理和組織數據提供了更有效的方式,同時支持多租戶。 1.1 什么是數據庫 在 Milvus 中,數據庫是組織和管理數據的邏輯單元。為了提高數據安全性并實現多租戶,你可以創建多個數據庫&am…

【質量管理】“武藏曲線”和“微笑曲線”的差異

什么是“微笑曲線” 在電子制造領域,“微笑曲線”(Smiling Curve)是由宏碁集團創始人施振榮于1992年提出的一個理論模型,用于描述產業鏈中不同環節的附加價值分布。該曲線因形狀類似“微笑”而得名,核心觀點是&#xf…

【html】a標簽target屬性以及擴展應用

進行頁面新窗口打開跳轉&#xff0c;我們使用 <a> 標簽即可實現。 <a>標簽可以通過設置target的值來控制此鏈接的打開方式&#xff0c;一般可取以下值&#xff1a; _self&#xff1a;默認值&#xff0c;鏈接在當前窗口打開 _blank&#xff1a;鏈接在新窗口打開 …

一文讀懂什么是 MCP、A2A、ANP

在人工智能快速發展的今天&#xff0c;智能體&#xff08;Agent&#xff09;正逐步成為互聯網交互的新主體。它們不僅能替代人類完成復雜任務&#xff0c;還能通過協作形成更高效的網絡生態。然而&#xff0c;這一切的實現離不開通信協議的支持。本文將解析智能體領域的三大核心…

Python3網絡爬蟲開發--爬蟲基礎

網絡爬蟲基礎 1.1 HTTP基本原理 1.1.1 URI和URL URI即統一資源標志符,URL即統一資源定位符。 有這樣一個鏈接,http://test.com/test.txt,在這個鏈接中,包含了訪問協議https,訪問目錄(即根目錄),資源名稱(test.txt)。通過這樣的鏈接,可以在互聯網上找到這個資源,這…

OpenCV顏色變換cvtColor

OpenCV計算機視覺開發實踐&#xff1a;基于Qt C - 商品搜索 - 京東 顏色變換是imgproc模塊中一個常用的功能。我們生活中看到的大多數彩色圖片都是RGB類型的&#xff0c;但是在進行圖像處理時需要用到灰度圖、二值圖、HSV&#xff08;六角錐體模型&#xff0c;這個模型中顏色的…

Hadoop----高可用搭建

目錄標題 **什么是高可用&#xff1f;****?搭建的步驟**一.jdk**安裝配置**- **要點**: 二.zookeeper**集群配置**- **要點** 三.Hadoop高可用的搭建- **要點**①環境變量的配置②配置文件的修改 ③內容分發④集群任務的初次啟動 什么是高可用&#xff1f; 通過冗余設計 自動…

【Rust 精進之路之第15篇-枚舉 Enum】定義、變體與數據關聯:表達多種可能性

系列: Rust 精進之路:構建可靠、高效軟件的底層邏輯 作者: 碼覺客 發布日期: 2025年4月20日 引言:當值擁有“選項”——超越結構體的表達力 在上一篇【結構體 Struct】中,我們學習了如何使用結構體將多個相關的數據字段組合成一個有意義的整體。結構體非常適合表示那些…

模擬實現strncat、qsort、atoi

目錄 前言 一、模擬實現strncat 參數 代碼演示&#xff1a; 二、模擬實現qsort 參數 代碼演示&#xff1a; 前言 本文主要是對strncat&#xff0c;qsort&#xff0c;atoi的模擬實現 一、模擬實現strncat C 庫函數 char *strncat(char *dest, const char *src, size_t n…

Ubuntu 系統中修改 MySQL 的 sql_mode

在 Ubuntu 系統中修改 MySQL 的 sql_mode 需要編輯 MySQL 的配置文件并重啟服務。以下是詳細步驟&#xff1a; 步驟 1&#xff1a;定位 MySQL 配置文件 MySQL 配置文件通常位于以下路徑之一&#xff08;具體取決于安裝方式&#xff09;&#xff1a; /etc/mysql/my.cnf /etc/m…

進階算法 第一課:貪心

本文遵循 CC BY-NC-ND 4.0 協議&#xff0c;作者&#xff1a; U?ェ?*U \texttt{U?ェ?*U} U?ェ?*U&#xff0c;轉載請獲得作者授權。 歡迎大家來到進階算法第一課&#xff1a;貪心&#xff1b;我會分為以下幾點為大家講解貪心&#xff1a; 什么是貪心。貪心的性質與分類。…

AI領域:MCP 與 A2A 協議的關系

一、為何會出現MCP和A2A 協議是非常重要的東西&#xff0c;只有大家都遵循統一的協議&#xff0c;整體生態才好發展&#xff0c;正如有了HTML&#xff0c;互聯網才快速發展&#xff0c;有了OpenAPI&#xff0c; API才會快速發展。 Agent目前是發展最快的領域&#xff0c;從最初…

深度學習訓練中的顯存溢出問題分析與優化:以UNet圖像去噪為例

最近在訓練一個基于 Tiny-UNet 的圖像去噪模型時&#xff0c;我遇到了經典但棘手的錯誤&#xff1a; RuntimeError: CUDA out of memory。本文記錄了我如何從復現、分析&#xff0c;到逐步優化并成功解決該問題的全過程&#xff0c;希望對深度學習開發者有所借鑒。 訓練數據&am…

FramePack V2版 - 支持首尾幀生成,支持LoRA,支持批量,支持50系顯卡,一個強大的AI視頻生成軟件 本地一鍵整合包下載

FramePack 是斯坦福大學主導開發的視頻生成框架&#xff0c;是一種用于視頻生成的下一幀&#xff08;下一幀部分&#xff09;預測神經網絡結構&#xff0c;可以逐步生成視頻。FramePack 主要開發者之一&#xff0c;就是業內大名鼎鼎的張呂敏大佬&#xff0c;AI領域的“賽博佛祖…

STM32 HAL 通用定時器延時函數

使用通用定時器TIM3&#xff0c;實現ms、us延時。 delay.c #include "delay.h" #include "stm32f1xx_hal.h"TIM_HandleTypeDef htim3;/*** brief 初始化定時器3用于延時* param 無* retval 無*/ void Delay_Init(void) {TIM_ClockConfigTypeDef sClock…

軟件功能測試和非功能測試有什么區別和聯系?

軟件測試是保障軟件質量的核心環節&#xff0c;而軟件功能測試和非功能測試作為測試領域的兩大重要組成部分&#xff0c;承擔著不同但又相互關聯的職責。 軟件功能測試指的是通過驗證軟件系統的各項功能是否按照需求規格說明書來正確實現&#xff0c;確保軟件的功能和業務流程…

使用Java調用TensorFlow與PyTorch模型:DJL框架的應用探索

在現代機器學習的應用場景中&#xff0c;Python早已成為廣泛使用的語言&#xff0c;尤其是在深度學習框架TensorFlow和PyTorch的開發和應用中。盡管Java在許多企業級應用中占據一席之地&#xff0c;但因為缺乏直接使用深度學習框架的能力&#xff0c;往往使得Java開發者對機器學…

Docker安裝beef-xss

新版的kali系統中安裝了beef-xss會因為環境問題而無法啟動&#xff0c;可以使用Docker來安裝beef-xss&#xff0c;節省很多時間。 安裝步驟 1.啟動kali虛擬機&#xff0c;打開終端&#xff0c;切換到root用戶&#xff0c;然后執行下面的命令下載beef的docker鏡像 wget https:…

metasploit(2)生成dll木馬

聲明&#xff01;本文章所有的工具分享僅僅只是供大家學習交流為主&#xff0c;切勿用于非法用途&#xff0c;如有任何觸犯法律的行為&#xff0c;均與本人及團隊無關&#xff01;&#xff01;&#xff01; 一、dll文件基本概念 DLL 是一種包含可由多個程序同時使用的代碼和數…