国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux調(diào)試器gdb

這篇具有很好參考價(jià)值的文章主要介紹了Linux調(diào)試器gdb。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器

本文已收錄至《Linux知識(shí)與編程》專欄!
作者:ARMCSKGT
演示環(huán)境:CentOS 7?

??

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器

?


目錄

前言

正文

下載gdb

生成可調(diào)式文件

進(jìn)入gdb

gdb常用指令

查看代碼 l?

運(yùn)行程序 r?

斷點(diǎn)設(shè)置 b?

顯示信息 info?

查看斷點(diǎn) info b?

刪除斷點(diǎn)?d?

禁用斷點(diǎn) disable breakpoints?

啟用斷點(diǎn) enable breakpoints?

逐過程調(diào)試??n?

逐語句調(diào)試 s?

查詢變量 p?

查詢變量值常顯示 display?

取消變量常顯示 undisplay?

查詢變量類型 ptype?

修改變量值 set var?

逐斷點(diǎn)運(yùn)行 c?

執(zhí)行到當(dāng)前函數(shù)的return后停下 finish?

跳轉(zhuǎn)到指定代碼行 until?

查看調(diào)用堆棧 bt?

查詢當(dāng)前棧幀中各變量參數(shù) info locals?

退出gdb指令 quit?

部分指令的簡(jiǎn)寫和全稱

最后


前言

前面我們介紹了gcc/g++的使用,我們知道在VS平臺(tái)下編寫代碼是可以調(diào)試的,調(diào)試是我們經(jīng)常使用的糾錯(cuò)手段,在Linux平臺(tái)下也有相關(guān)的調(diào)試工具,那就是gdb,調(diào)試是我們必須掌握的技能,沒有調(diào)試項(xiàng)目的錯(cuò)誤就無法快速解決!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器?


正文

下載gdb


有些純凈Linux系統(tǒng)默認(rèn)沒有g(shù)db,需要手動(dòng)安裝!

指令:

sudo yum -y install gdb 

生成可調(diào)式文件


程序的發(fā)布方式有兩種,debug模式和release模式,Linux工具gcc/g++出來的二進(jìn)制程序默認(rèn)是release模式,要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候加上 -g 選項(xiàng)!


指令:

gcc -g [編譯文件]  //g++操作與此相同

?

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器?

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器?

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
release模式的二進(jìn)制程序也可以進(jìn)入gdb,但是只能運(yùn)行,不能查詢?nèi)魏螀?shù)信息!

進(jìn)入gdb


指令:

gdb [可執(zhí)行程序]

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
gdb界面

gdb常用指令


在gdb中,輸入一個(gè)指令后,下次不輸入指令回車執(zhí)行的是上一條指令,所以調(diào)試時(shí)如果接下來將長(zhǎng)時(shí)間使用一條指令,則一直回車即可!


查看代碼 l?

l           //查看第一行到第十行的代碼(第一次執(zhí)行時(shí))
l [行號(hào)]    //查看程序從該行開始的前后五行代碼(如果前面沒有代碼則向后顯示十行)
l [函數(shù)名]  //顯示該函數(shù)位置的前后五行代碼(共十行)

說明:gdb在執(zhí)行l(wèi)指令后,再次回車會(huì)展示后十行代碼!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
選擇行號(hào)1然后回車顯示后10行代碼,再次回車?yán)^續(xù)顯示!
linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
如果選擇中間行,則會(huì)展示前后五行(共十行)
linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
gdb也可以顯示代碼中某函數(shù)的前后代碼(默認(rèn)也是前后五行)

運(yùn)行程序 r?

r  //啟動(dòng)程序(有斷點(diǎn)則運(yùn)行到第一個(gè)斷點(diǎn)處停下,沒有則直接運(yùn)行到結(jié)束)
linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
在gdb中r指令相當(dāng)于VS下的快捷鍵F5

?說明:一般使用gdb都是先展示代碼,然后運(yùn)行程序,這樣可以對(duì)照代碼檢查運(yùn)行結(jié)果,在gdb中對(duì)于死循環(huán)的程序仍然可以使用CTRL+c退出程序,但不會(huì)退出gdb!


斷點(diǎn)設(shè)置 b?

b [行號(hào)]    //在該行打下斷點(diǎn)
b [函數(shù)名]  //在該函數(shù)行打下斷點(diǎn)

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器

?注意:對(duì)函數(shù)名打斷點(diǎn),斷點(diǎn)會(huì)落在該函數(shù)執(zhí)行的第一條語句!


顯示信息 info?

info [gdb指令]  //部分指令可以通過info查看詳細(xì)信息
i [gdb指令] //簡(jiǎn)寫為i
linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
info可以查看相關(guān)的指令信息,其中最常用的是breakpoints選項(xiàng)(簡(jiǎn)寫為b)

?說明:直接輸入info指令會(huì)顯示該指令的所有可操作選項(xiàng)!


查看斷點(diǎn) info b?

//查看所有斷點(diǎn)信息
info b //簡(jiǎn)寫
info breakpoints
info break

在gdb中info b指令是經(jīng)常使用的查看斷點(diǎn)的指令,當(dāng)然info也不止于此!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
通過info b查看斷點(diǎn)的詳細(xì)信息!

在斷點(diǎn)信息中我們會(huì)發(fā)現(xiàn)有Num一行編號(hào),這個(gè)編號(hào)是讓我們更好的對(duì)斷點(diǎn)進(jìn)行區(qū)分,當(dāng)我們刪除1號(hào)斷點(diǎn)再次添加斷點(diǎn)時(shí),新斷點(diǎn)為3號(hào),斷點(diǎn)順序并未修改!當(dāng)我們退出gdb時(shí)所有斷點(diǎn)信息才會(huì)失效!

??

而且這些編號(hào)在進(jìn)行關(guān)于斷點(diǎn)的其他操作時(shí),也會(huì)用到,例如刪除斷點(diǎn)需要這些編號(hào)指定!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


刪除斷點(diǎn)?d?

d [斷點(diǎn)編號(hào)]  //刪除該編號(hào)斷點(diǎn)
d //刪除所有斷點(diǎn)
d breakponits //刪除所有斷點(diǎn)

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


禁用斷點(diǎn) disable breakpoints?

disable breakpoints [斷點(diǎn)編號(hào)]  

說明:有時(shí)候在進(jìn)行大項(xiàng)目測(cè)試時(shí),我們會(huì)打許多斷點(diǎn),我們不想讓程序運(yùn)行到某就停下斷點(diǎn),但是也不想刪除斷點(diǎn),這時(shí)可以禁用斷點(diǎn)!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
當(dāng)斷點(diǎn)被禁用后,程序運(yùn)行到該行時(shí)就不會(huì)停下了!

啟用斷點(diǎn) enable breakpoints?

enable breakpoints [斷點(diǎn)編號(hào)]

說明:當(dāng)我們想使用被禁用的斷點(diǎn)時(shí),使用該指令可以啟用斷點(diǎn)!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


逐過程調(diào)試??n?

n //從斷點(diǎn)處開始進(jìn)行逐過程調(diào)試

逐過程調(diào)試不會(huì)進(jìn)入函數(shù),直接返回函數(shù)執(zhí)行完的結(jié)果!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
調(diào)試時(shí)執(zhí)行的函數(shù)代碼會(huì)顯示代碼行號(hào)!

逐語句調(diào)試 s?

s  //從斷點(diǎn)處開始逐語句調(diào)試

逐語句調(diào)試會(huì)進(jìn)入函數(shù)中,將每一條語句運(yùn)行展示!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
調(diào)試時(shí)的每一條語句都會(huì)顯示其所在代碼中的行號(hào)!

查詢變量 p?

p [變量]  //查看變量值
p(變量)
print [變量]
print(變量)

查看變量的方式可以簡(jiǎn)寫,也可以通過括號(hào)將需要查詢的變量括起來!?

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


查詢變量值常顯示 display?

display [變量]  //讓變量值隨查詢的運(yùn)行一直更新顯示

添加常顯示后,程序每走一步(或一句)都會(huì)顯示變量的常顯示變量的變化!?

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
當(dāng)變量常顯示后每執(zhí)行一條語句就會(huì)顯示變量 i 的變化情況

說明:常顯示中的變量前的編號(hào)與取消該變量的顯示操作相關(guān)!常顯示列表中的編號(hào)只會(huì)隨著添加越來越大,并不會(huì)一直以1為開始!


取消變量常顯示 undisplay?

undisplay [常顯示列表編號(hào)]  //取消變量在列表中的常顯示

說明:取消常顯示并不是指定變量,而是指定其在常顯示中的編號(hào)!因?yàn)樵贑++中,不同類和不同遇可能有相同的變量,此時(shí)會(huì)混淆!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


查詢變量類型 ptype?

ptype [變量]  

因?yàn)槲覀儾樵冏兞恐禃r(shí)只能獲取變量的值,如果需要獲取變量的類型則可以使用這個(gè)指令!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


修改變量值 set var?

set var [變量] = [設(shè)置的值]

在程序運(yùn)行時(shí)可能我們想一次性迭代到某數(shù)值,使用set var就能完成!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


逐斷點(diǎn)運(yùn)行 c?

c  //逐斷點(diǎn)按順序跳轉(zhuǎn)執(zhí)行

當(dāng)我們想在斷點(diǎn)之間運(yùn)行時(shí),直接使用該指令即可,相當(dāng)于VS的F5快捷鍵!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器
在執(zhí)行該gdb指令前需要r指令讓程序運(yùn)行!

執(zhí)行到當(dāng)前函數(shù)的return后停下 finish?

finish  //讓程序執(zhí)行return語句后停下

指令要求:必須在有返回值的函數(shù)中運(yùn)行且必須讓程序先運(yùn)行起來!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


跳轉(zhuǎn)到指定代碼行 until?

until [代碼行號(hào)]  //讓執(zhí)行位置跳轉(zhuǎn)到指定行

當(dāng)我們想要去某一條語句查看運(yùn)行情況時(shí)可以使用此指令跳轉(zhuǎn)!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器

說明:如果前面有未執(zhí)行的代碼該指令會(huì)運(yùn)行到指定代碼行號(hào)然后停下,如果是跳轉(zhuǎn)到執(zhí)行過的代碼,則會(huì)從該行開始繼續(xù)執(zhí)行!


查看調(diào)用堆棧 bt?

bt  //查看函數(shù)調(diào)用,以棧的順序顯示

當(dāng)我們需要查看函數(shù)相互之間的調(diào)用時(shí)可以使用該指令!該指令需要先運(yùn)行程序才能查看,因?yàn)槌绦蜻\(yùn)行時(shí)會(huì)先為函數(shù)建立棧幀,沒有運(yùn)行程序就沒有棧幀!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


查詢當(dāng)前棧幀中各變量參數(shù) info locals?

info locals

當(dāng)我們正在某一函數(shù)中調(diào)試時(shí),通過該指令可以查看該函數(shù)中所有變量的值!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器


退出gdb指令 quit?

quit  //或使用 CTRL+d 也可以!
q     //也可以使用簡(jiǎn)寫形式

退出gdb只需要輸入q(quit)即可,或者使用快捷鍵CTRL+d,如果有程序正在調(diào)試沒有退出,則gdb會(huì)先詢問!


部分指令的簡(jiǎn)寫和全稱

l list
r run

n

next
s step
b break
i b info break
f finish
p print
c continue
d delete breakpoints
u until
bt? breaktrace
q quit

最后

Linux調(diào)試器gdb的介紹到這里就結(jié)束了,相信gdb的學(xué)習(xí)可以助力你在Linux相同上更順利的構(gòu)建大型工程,從容的面對(duì)各種bug,雖然在使用上與VS還有些差異,但是配合Linux上的其他工具一定可以使效率有一定的提升!

本次Linux調(diào)試器gdb的基本知識(shí)就介紹到這里啦,希望能夠盡可能幫助到大家。

如果文章中有瑕疵,還請(qǐng)各位大佬細(xì)心點(diǎn)評(píng)和留言,我將立即修補(bǔ)錯(cuò)誤,謝謝!

linux 沒有g(shù)db,Linux知識(shí)與編程,linux,運(yùn)維,服務(wù)器

???其他文章閱讀推薦??

Linux編輯器vim-CSDN博客

Linux 編譯器 gcc/g++-CSDN博客

Linux項(xiàng)目自動(dòng)化構(gòu)建工具make/Makefile-CSDN博客

??歡迎讀者多多瀏覽多多支持!??文章來源地址http://www.zghlxwxcb.cn/news/detail-624333.html

到了這里,關(guān)于Linux調(diào)試器gdb的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Linux】Linux調(diào)試器-gdb使用

    【Linux】Linux調(diào)試器-gdb使用

    程序的發(fā)布方式有兩種,debug模式和release模式 Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式 要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng) 退出:? 調(diào)試命令: list/l 行號(hào):顯示binFile源代碼,接著上次的位置往下列,每次列10行。 list/l 函數(shù)名:列出某

    2024年02月21日
    瀏覽(27)
  • [Linux] Linux代碼調(diào)試器 -- gdb

    [Linux] Linux代碼調(diào)試器 -- gdb

    1、程序的發(fā)布方式有兩種,debug模式和release模式 2、Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式 3、要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng) 我們先來寫一段C語言代碼: 這里我們正常再編寫一個(gè)Makefile文件,用于自動(dòng)化構(gòu)建,我們要還是正常的編

    2024年02月05日
    瀏覽(27)
  • 【Linux】gdb調(diào)試器的使用

    【Linux】gdb調(diào)試器的使用

    文章目錄 一、gdb簡(jiǎn)介 二、調(diào)試前的準(zhǔn)備 1、生成調(diào)試文件 2、啟動(dòng) gdb? 三、gdb 使用方法? 1、查看源代碼 2、設(shè)置 / 查看斷點(diǎn)(多種方式設(shè)置斷點(diǎn)) 方法一 方法二 方法三 3、run? 4、刪除斷點(diǎn)、斷點(diǎn)無效 5、逐過程調(diào)試(以函數(shù)為單位) 6、逐語句調(diào)試 7、查看調(diào)用鏈 8、查看變

    2024年02月02日
    瀏覽(35)
  • 【Linux】——調(diào)試器-gdb的使用

    【Linux】——調(diào)試器-gdb的使用

    序言: 本期,我將帶領(lǐng)大家學(xué)習(xí)的關(guān)于linux下的 調(diào)試器gdb 的使用,廢話不多說跟著我一起去看看吧??! 目錄 前言 (一)背景介紹 1、debug模式和release模式 2、為什么Release不能調(diào)試但DeBug可以調(diào)試 3、初步見識(shí) 1??readelf (二)調(diào)試代碼 1、命名大全 2、具體演示 0??行號(hào)顯

    2024年02月07日
    瀏覽(23)
  • 【Linux】調(diào)試器:gdb 的基本使用

    gdb 全稱 GNU symbolic debugger,是 Linux 下常用的程序調(diào)試器。 調(diào)試器的核心工作,主要是為了定位問題。廢話不多說。 gdb 的安裝 另外: gcc、g++ 默認(rèn)形成的版本是 release,不是 debug 版本!所以想要在 Linux 下調(diào)試程序,需要在 Makefile 文件 中,添加 -g 選項(xiàng) 指定以 dubug 方式編譯程

    2024年02月16日
    瀏覽(23)
  • Linux | 調(diào)試器GDB的詳細(xì)教程【純命令行調(diào)試】

    Linux | 調(diào)試器GDB的詳細(xì)教程【純命令行調(diào)試】

    學(xué)習(xí)了【vim】知道了如何 編輯 一個(gè)代碼文本 學(xué)習(xí)了【gcc】知道了如何 編譯 一個(gè)代碼文本 學(xué)習(xí)了【make/Makefile】知道了如何 自動(dòng)化構(gòu)建 一個(gè)代碼文本 但是如何對(duì)一段代碼去進(jìn)行調(diào)試呢,此時(shí)就要使用到 Linux下的調(diào)試器gdb 了。對(duì)于這個(gè)調(diào)試器來說,不像是VS中那樣的圖形化界

    2024年02月02日
    瀏覽(28)
  • 【Linux】Linux下調(diào)試器gdb的使用

    【Linux】Linux下調(diào)試器gdb的使用

    ??作者主頁:@安 度 因 ??學(xué)習(xí)社區(qū):StackFrame ??專欄鏈接:Linux 如果無聊的話,就來逛逛 我的博客棧

    2024年02月19日
    瀏覽(29)
  • Linux開發(fā)工具之調(diào)試器gdb

    程序的發(fā)布方式有兩種,debug模式和release模式 Linux gcc/g++出來的二進(jìn)制程序,默認(rèn)是release模式 要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng) ? 所以一份代碼若要被調(diào)試必須是debug模式,但是在linux下我們編譯代碼的時(shí)候默認(rèn)為release模式,要想讓我們的代碼

    2024年02月07日
    瀏覽(22)
  • Linux:gdb調(diào)試器的解析+使用(超詳細(xì)版)

    Linux:gdb調(diào)試器的解析+使用(超詳細(xì)版)

    程序的發(fā)布方式有兩種,debug模式和release模式 debug模式:可以被調(diào)試; release模式:不可以被調(diào)試。 為什么需要debuy和release這兩個(gè)模式呢? 答:程序員在開發(fā)的時(shí)候需要去調(diào)試代碼,所以需要debuy模式,而用戶一般不懂這些代碼的調(diào)試不需要debuy模式,只需要快速的下載和安

    2024年02月05日
    瀏覽(30)
  • [linux開發(fā)工具]小程序--進(jìn)度條、調(diào)試器 - gdb

    [linux開發(fā)工具]小程序--進(jìn)度條、調(diào)試器 - gdb

    ?? 作者簡(jiǎn)介 :RO-BERRY ?? 學(xué)習(xí)方向:致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識(shí) ?? 日后方向 : 偏向于CPP開發(fā)以及大數(shù)據(jù)方向,歡迎各位關(guān)注,謝謝各位的支持 第一種情況 執(zhí)行結(jié)果如下: 可以看到程序先執(zhí)行printf再執(zhí)行sleep 第二種情況 執(zhí)行結(jié)果如下: 在這里

    2024年02月22日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包