Linux調試器——gdb的基礎使用

目錄

1.背景

2.指令的使用

2.1gdb的使用和退出

2.2顯示源代碼

2.3運行程序

2.4調試

1.打斷點

2.查斷點

3.去斷點

4.運行

5.關閉斷點

6.啟用斷點

7.逐過程

8.進入函數

9.顯示變量的值


1.背景

眾所周知,我們的程序發布有兩種,分別是debug模式和release模式,在Linux中我們主要有兩種編譯器——gcc和g++,一個是編譯C語言程序的,一個是編譯C++程序的,當我們使用這些編譯器進行匯編步驟的時候,會生成一個二進制文件,Linux系統中默認它是release模式的。那如果我們想使用gdb調試器來進行調試的話該怎么做呢?

我們需要在源代碼生成二進制程序的時候, 加上 -g 選項。(如圖所示)

由上圖所示,我們可以看到生成了一個testdebug的二進制文件。

gdb調試器對debug模式的文件才能使用,所以我們才要生成testdebug這個文件。

接下來我就來講解一些指令要如何去使用。

2.指令的使用

2.1gdb的使用和退出

我們使用gdb直接gdb 文件就行了。

如圖所示,這就說明我們的gdb使用成功了。

那么我怎么退出呢?

很簡單,直接quit就能退出了。

2.2顯示源代碼

list/l 行號:顯示binFile源代碼,接著上次的位置往下列,每次列10行。

這是我們簡單寫的一段代碼,接下來我會用它來進行舉例說明。

如圖所示,我們使用list/l時一次顯示10行,我們再按回車就會再打印10行,打印完了就會停下,我們再來看看list/l + 行號:

我們發現list/l + 行號不是從你輸入的行號開始往后顯示10行,而是以你輸入的為中間值,顯示上下文,總共為10行。如果沒有下文它就不顯示下文嘛(沒有上文同理),如圖所示:

我們也可以加函數名來進行顯示:

如上圖所示,我們使用list/l + 函數名的方式也是查函數名的上下文總共為10個。

2.3運行程序

r或run:運行程序。

第一行表示的是我們開始運行的項目還有這個項目的位置,第二行exited normally表示的是程序正常運行結束。

2.4調試

1.打斷點

我們可以b + 行號/函數名。

第二行的意思就是打了一個序號為1的斷點,后面的十六進制就是它的地址,test.c就是文件名,行數在第十行。

2.查斷點

info break :查看斷點信息。(也可以簡寫成i b)

由此我們就可以看到它的斷點個數、序號,Disp我們先不管,Enb表達的是它的使能,就是說這個斷點是開啟的狀態(y)還是關閉的狀態(n),后面的信息就是它的地址,還有在哪個文件.

3.去斷點

delete?breakpoints?n:刪除序號為n的斷點(d 序號)

4.運行

我們在第十五行的時候打了一個斷點,所以運行在第十五行的位置停了下來。

5.關閉斷點

disable?breakpoints:禁用斷點

如圖所示,我們保留了序號為二的斷電且禁用了它。

6.啟用斷點

disable?breakpoints:禁用斷點

如圖所示,使能又變回了y。

7.逐過程

n 或 next:單條執行。

我們在run運行后自動到了我們的斷點位置,接下來我們輸入n/next就可以逐過程調試了,由于Linux的gdb會自動記錄上一次的指令,所以我們直接一直回車就可以了。

8.進入函數

s或step:進入函數調用

沒遇到函數前我們還是繼續n,到函數的時候我們輸入s/step,就進入到我們的函數中了。

9.顯示變量的值

p/print 變量:打印變量值。

如圖所示,我們a,b加起來是2,所以我們的c=a+b就是2,$后面的數字表示查詢了幾次。

display?變量名:跟蹤查看一個變量,每次停下來都顯示它的值

undisplay:取消對先前設置的那些變量的跟蹤

這里記住輸入的不是變量名,而是它前面的序號。

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

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

相關文章

18.貪心算法

排序貪心 區間貪心 刪數貪心 統計二進制下有多少1 int Getbit_1(int n){int cnt0;while(n){nn&(n-1);cnt;}return cnt; }暴力加一維前綴和優化 #include <iostream> #include <climits> using namespace std; #define int long long const int N2e510; in…

uni-app 經驗分享,從入門到離職(五)——由淺入深 uni-app 數據緩存

文章目錄 &#x1f4cb;前言?關于專欄 &#x1f3af;什么是數據存儲&#x1f9e9;數據存儲——存儲&#x1f4cc; uni.setStorage(OBJECT)&#x1f4cc; uni.setStorageSync(KEY,DATA) &#x1f9e9;數據存儲——獲取&#x1f4cc; uni.getStorage(OBJECT)&#x1f4cc; uni.g…

2024年【起重機司機(限橋式起重機)】找解析及起重機司機(限橋式起重機)考試總結

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 2024年【起重機司機(限橋式起重機)】找解析及起重機司機(限橋式起重機)考試總結&#xff0c;包含起重機司機(限橋式起重機)找解析答案和解析及起重機司機(限橋式起重機)考試總結練習。安全生產模擬考試一點通結合國家…

[AI]部署安裝有道QanyThing

前提條件&#xff1a; 1、win10系統更新到最新的版本&#xff0c;系統版本最好為專業版本 winver 查看系統版本&#xff0c;內部版本要大于19045 2、CPU開啟虛擬化 3、開啟虛擬化功能&#xff0c;1、2、3每步完成后均需要重啟電腦&#xff1b; 注&#xff1a;windows 虛擬…

CSS輕松學:簡單易懂的CSS基礎指南

css基礎 更多web開發知識歡迎訪問我的專欄>>> 01-CSS初體驗 層疊樣式表 (Cascading Style Sheets&#xff0c;縮寫為 CSS&#xff09;&#xff0c;是一種 樣式表 語言&#xff0c;用來描述 HTML 文檔的呈現&#xff08;美化內容&#xff09;。 書寫位置&#xff1a;…

基于HAL庫的STM32-ADC學習(附帶代碼)

1.前言 STM32ADC是一種模擬/數字轉換器&#xff0c;可以將模擬信號轉換為數字信號。STM32ADC有多個通道&#xff0c;可以選擇不同的輸入源、轉換模式、觸發方式和采樣時間。STM32ADC的轉換結果可以通過中斷、DMA或者寄存器讀取。 在本文中&#xff0c;我將介紹如何使用STM32C…

第九屆大數據與計算國際會議 (ICBDC 2024) 即將召開!

2024年第九屆大數據與計算國際會議&#xff08;ICBDC 2024&#xff09;將于2024年5月24至26日在泰國曼谷舉行。本次會議由朱拉隆功大學工程學院工業工程系主辦。ICBDC 2024的宗旨是展示大數據和計算主題相關科學家的最新研究和成果&#xff0c;為來自不同地區的專家代表們提供一…

嵌入式學習筆記總結Day23----minshell項目總結

今天進行了linux系統高級編程io階段學習的結尾&#xff0c;完成了一個minshell的小項目。 一、項目介紹 利用Linux中IO接口實現MiniShell&#xff0c;實現常用的shell指令的實現。 項目想要實現需要思考的地方有&#xff1a; 1.如何打印終端命令 2.如何接受終端命令 3.實現對…

Sora - 探索AI視頻模型的無限可能-官方報告解讀與思考

一、引言 最近SORA火爆刷屏&#xff0c;我也忍不住找來官方報告分析了一下&#xff0c;本文將深入探討OpenAI最新發布的Sora模型。Sora模型不僅僅是一個視頻生成器&#xff0c;它代表了一種全新的數據驅動物理引擎&#xff0c;能夠在虛擬世界中模擬現實世界的復雜現象。本文將重…

[力扣 Hot100]Day33 排序鏈表

題目描述 給你鏈表的頭結點 head &#xff0c;請將其按 升序 排列并返回 排序后的鏈表 。 出處 思路 歸并排序即可。 代碼 class Solution { public:ListNode* merge(ListNode *h1,ListNode *h2) {ListNode *head nullptr;if(h1->val<h2->val){head h1;h1h1-…

2024.2.22 C++QT 作業

思維導圖 練習題 1>完善對話框&#xff0c;點擊登錄對話框&#xff0c;如果賬號和密碼匹配&#xff0c;則彈出信息對話框&#xff0c;給出提示”登錄成功“&#xff0c;提供一個Ok按鈕&#xff0c;用戶點擊Ok后&#xff0c;關閉登錄界面&#xff0c;跳轉到其他界面。如果賬…

Stream、Collections、Collectors用法

當涉及Java編程中的集合處理時&#xff0c;Stream、Collections和Collectors是三個常用的工具。以下是它們各自的主要功能和使用的一些方法的概要&#xff1a; Stream&#xff1a; 概要&#xff1a;Stream 是 Java 8 引入的一個強大工具&#xff0c;用于處理集合數據的流式操作…

Vue響應式狀態ref()與reactive()

1. ref()聲明響應式狀態 <template><!--在DOM元素調用變量時,不需要指定輸出變量的value,因為Vue會幫你輸出.value但是注意,這個幫助只會幫助頂級的ref屬性才會被解包--><div>{{ count }}</div><div>{{ object }}</div><div>{{ arr…

git切換倉庫地址

已有git倉庫&#xff0c;要切換提交的倉庫地址&#xff0c;用以下命令 git remote set-url origin 自己的倉庫地址 用以下命令&#xff0c;查看當前倉庫地址&#xff1a; git remote show origin 切換倉庫后&#xff0c;用以下命令初始化提交倉庫&#xff1a; git push -u o…

數據庫增刪改查

DDL: 數據定義語言&#xff0c;用來定義數據庫對象&#xff08;數據庫、表、字段&#xff09;DML: 數據操作語言&#xff0c;用來對數據庫表中的數據進行增刪改DQL: 數據查詢語言&#xff0c;用來查詢數據庫中表的記錄DCL: 數據控制語言&#xff0c;用來創建數據庫用戶、控制數…

c++11:可調用對象

文章目錄 引言1.普通函數2.函數指針3.函數對象(仿函數)4.Lambda表達式(匿名函數)5.function6.bind 引言 可調用對象是C11引入的新概念&#xff0c;可以像函數調用方式的觸發調用的對象就是可調用對象。 c98可調用對象(普通函數&#xff0c;函數指針&#xff0c;仿函數) c11可調…

Java設計模式【代理模式】

一、前言 1.1 背景 在不改變原有代碼的基礎上&#xff0c;對方法進行功能性的增強&#xff1b; 1.2 簡介 代理模式是一種結構型模式&#xff0c;為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下&#xff0c;一個對象不想或者不能直接引用另一個對象&#xff0…

axure9.0 工具使用思考

原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】快速原型設計工具原型設計軟件【AxureRP】…

CentOS使用Docker搭建Halo網站并實現無公網ip遠程訪問

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《C》 《Linux》 《Cpolar》 ??感謝大家點贊&#x1f44d;收藏?評論?? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&…

【華為OD機試真題 C++語言】483、中文分詞模擬器 | 機試真題+思路參考+代碼解析(C卷)

文章目錄 一、題目??題目描述??輸入輸出??樣例1??樣例2??樣例3二、思路參考三、代碼參考作者:KJ.JK??個人博客首頁: KJ.JK ??專欄介紹: 華為OD機試真題匯總,定期更新華為OD各個時間階段的機試真題,每日定時更新,本專欄將使用C++語言進行更新解答,包含真…