1、背景
1、程序的發(fā)布方式有兩種,debug模式和release模式
2、Linux gcc/g++出來(lái)的二進(jìn)制程序,默認(rèn)是release模式
3、要使用gdb調(diào)試,必須在源代碼生成二進(jìn)制程序的時(shí)候, 加上 -g 選項(xiàng)
2、使用gdb
2.1 生成debug版本
我們先來(lái)寫一段C語(yǔ)言代碼:
#include <stdio.h>
int main()
{
int i = 0;
for(i = 0; i < 5; i++)
{
printf("hello linux!\n");
}
return 0;
}
這里我們正常再編寫一個(gè)Makefile文件,用于自動(dòng)化構(gòu)建,我們要還是正常的編寫生成的可執(zhí)行文件就是release版本,但是在gcc編譯代碼的時(shí)候加上 -g 選項(xiàng),這樣生成的就是debug版本的可執(zhí)行程序了。
此時(shí)我們生成的就是debug版本的可執(zhí)行文件。
2.2 進(jìn)入gdb
gdb test_debug //gdb 可執(zhí)行程序名
2.3 顯示源代碼
list / l 行號(hào):顯示 binFile 源代碼,接著上次的位置往下列,每次列 10 行。 list / l
函數(shù)名:列出某個(gè)函數(shù)的源代碼。
list n // 將第n行放在輸出的十行中間輸出出來(lái)
list 函數(shù)名 // 從函數(shù)名開始打印10行出來(lái)
這里 list 可以簡(jiǎn)寫為 l 使用。
2.4 運(yùn)行程序/開始調(diào)試
r或run:運(yùn)行程序。
如果存在斷點(diǎn),就會(huì)跳轉(zhuǎn)到斷點(diǎn)行,這就是調(diào)試。
2.5 打斷點(diǎn),查看斷點(diǎn)信息
break(b) 行號(hào):在某一行設(shè)置斷點(diǎn)
break 函數(shù)名:在某個(gè)函數(shù)開頭設(shè)置斷點(diǎn)
b 行號(hào) // 在某一行打斷點(diǎn)
info break :查看斷點(diǎn)信息
2.6 刪除斷點(diǎn)
delete breakpoints:刪除所有斷點(diǎn)
delete breakpoints n:刪除序號(hào)為n的斷點(diǎn)
d // delete簡(jiǎn)寫,直接d是刪除所有斷點(diǎn)
d Num // 刪除編號(hào)為Num的斷點(diǎn)
這里我們可以發(fā)現(xiàn),在一次調(diào)試的周期中,斷點(diǎn)被創(chuàng)建出來(lái)再被刪除,然后再去創(chuàng)建斷點(diǎn),斷點(diǎn)序號(hào)是線性遞增的的,不是刪掉后重新按連續(xù)的升序去排。
2.7 斷電的禁用、啟用
disable breakpoints:禁用斷點(diǎn)
enable breakpoints:?jiǎn)⒂脭帱c(diǎn)
2.8 逐語(yǔ)句執(zhí)行
s或step:進(jìn)入函數(shù)調(diào)用
2.9 逐過(guò)程執(zhí)行
n 或 next:?jiǎn)螚l執(zhí)行(不進(jìn)入函數(shù)調(diào)用)
2.10 跟蹤變量
display 變量名:跟蹤查看一個(gè)變量,每次停下來(lái)都顯示它的值
undisplay:取消對(duì)先前設(shè)置的所有變量的跟蹤
undisplay n:取消對(duì)先前設(shè)置的編號(hào)為n的變量的跟蹤
2.11 跳轉(zhuǎn)到X行
until X行號(hào):跳至X行
2.12 跳轉(zhuǎn)到下一個(gè)斷點(diǎn)
continue(或c):從當(dāng)前位置開始連續(xù)而非單步執(zhí)行程序
2.13 運(yùn)行完整個(gè)指定函數(shù)
finish:執(zhí)行到當(dāng)前函數(shù)返回,然后挺下來(lái)等待命令
2.14 查看調(diào)用堆棧
breaktrace(或bt):查看各級(jí)函數(shù)調(diào)用及參數(shù)
當(dāng)我們主函數(shù)中調(diào)用了其他函數(shù),我們使用bt命令就能看到所調(diào)用的堆棧:
我們這次又寫了一個(gè)func函數(shù),并且進(jìn)入到func函數(shù)中,查看調(diào)用的堆棧,然后再跑完func函數(shù),再次查看調(diào)回用的堆棧,bt命令可以完整的看到堆棧調(diào)用的情況。
2.15 設(shè)置變量的值
set var 變量名 = val // 將某變量的值設(shè)置為val文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-742596.html
用處:在處理判斷邏輯出問(wèn)題的時(shí)候使用。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-742596.html
到了這里,關(guān)于[Linux] Linux代碼調(diào)試器 -- gdb的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!