linux GDB調試--啟動程序進行調試:GDB 程序名
linux GDB調試--對正在運行的程序進行調試:啟動GDB后,attach 進程ID
linux GDB調試--對Coredumped文件進行調試:GDB 程序名 Coredumped文件名
調試准備
1、簡單的累加
1 #include <stdio.h> 2 3 int main (void) 4 { 5 int count = 0; 6 int i; 7 for ( i = 0; i < 10; i++){ 8 count += i; 9 } 10 printf("count = %d \n", count); 11 return 0; 12 }
2、makefile
1 cc = gcc 2 target = main 3 obj = add.o 4 $(target):$(obj) 5 $(cc) -g $(obj) -Wall -o $(target) -lpthread -lrt 6 add.o : add.c 7 $(cc) -c add.c -g -lpthread 8 .PHONY:clean 9 $(RM) *.o $(target)
注意:Makefile中只能出現tab開頭,不能是四個空格,GDB調試編譯必須帶 -g 。
3、編譯過程
調試過程
1、進入gdb調試
gdb 編譯生成的可執行文件
2、查看代碼
list或者l(l 等價於 list)
直接回車表示執行上一條命令
3、設置斷點
a.直接根據函數名設置斷點
如break main或b mian (b 等價於 break)
b.根據行數設置斷點
如b 8
c.根據文件名和行數設置斷點
如 break add.c:8 在add.c中第8行設置斷點
查看斷點 info breakpoint 或 i b(i 等價於info)
4、開始
開始執行
start命令
一步步執行:
next或n(n等價於next)
后可直接回車
打印參數值
print count
前面表示打印次數
p/[] 變量
x 按十六進制格式顯示變量。
d 按十進制格式顯示變量。
u 按十六進制格式顯示無符號整型。
o 按八進制格式顯示變量。
t 按二進制格式顯示變量。
a 按十六進制格式顯示變量。
c 按字符格式顯示變量。
f 按浮點數格式顯示變量。
查看內存
查看變量地址和值
查看內存
x/<n/f/u> <addr>
查看機器碼
display/i $pc
$pc是GDB的環境變量,表示着指令的地址,/i則表示輸出格式為機器指令碼。