gdb工具使用

2021-10-01 23:25:10 字數 3052 閱讀 7627

gdb是乙個由gnu開源組織發布的、unix/linux作業系統下的、基於命令列的、功能強大的程式除錯工具。 對於一名linux下工作的c++程式設計師,gdb是必不可少的工具。

以下程式為例:

#include

#include

int add_sum(int a, int b)

int main(int argc, char* ar**)

int a = atoi(ar**[1]);

int b = atoi(ar**[2]);

printf("sum = %d.\n", add_sum(a, b));

return 0;

}除錯c/c++程式編譯選項需要加入-g引數

執行編譯:g++ -g main.cpp -o test

用gdb啟動程式:

gdb test

指定啟動引數

(gdb) set args 2 3

或者(gdb) run 2 3

如果程式正在執行服務程式可以attach上去:

gdb 程式 pid程序號

(gdb) list //檢視**

1       #include

2       #include

3       int add_sum(int a, int b)

4      

7      

8       int main(int argc, char* ar**)

9      

15         int a = atoi(ar**[1]);

16         int b = atoi(ar**[2]);

17        

18         printf("sum = %d.\n", add_sum(a, b));

19         return 0;  

20     }

(gdb) b main.cpp:15 //設定斷點

(gdb) b main.cpp:16

break func(break縮寫為b):在函式func()的入口處設定斷點,如:break cb_button

delete 斷點號n:刪除第n個斷點

disable 斷點號n:暫停第n個斷點

enable 斷點號n:開啟第n個斷點

clear 行號n:清除第n行的斷點

info b (info breakpoints) :顯示當前程式的斷點設定情況

delete breakpoints:清除所有斷點:

(gdb) info b //檢視斷點

num     type           disp enb address            what

1       breakpoint     keep y   0x0000000000400607 in main(int, char**) at main.cpp:15

2       breakpoint     keep y   0x000000000040061d in main(int, char**) at main.cpp:16

(gdb) r 1 32 //執行

(gdb) c

continuing.

breakpoint 2, main (argc=3, ar**=0x7fffffffe3b8) at main.cpp:16

16         int b = atoi(ar**[2]);

(gdb) n

18         printf("sum = %d.\n", add_sum(a, b));

next:(簡寫 n),單步跟蹤程式,當遇到函式呼叫時,也不進入此函式體;此命令同 step 的主要區別是,step 遇到使用者自定義的函式,將步進到函式中去執行,而 next 則直接呼叫函式,不會進入到函式體內。

(gdb) s

add_sum (a=1, b=3) at main.cpp:5

5           return a + b;

step (簡寫s):單步除錯如果有函式呼叫,則進入函式;與命令n不同,n是不進入呼叫的函式的

(gdb) p /x a //十六進製制顯示

$1 = 0x1

(gdb) call add_sum(1,3) //call某個函式

$2 = 4

where/bt :當前執行的堆疊列表;

bt backtrace 顯示當前呼叫堆疊

up/down 改變堆疊顯示的深度

set args 引數:指定執行時的引數

show args:檢視設定好的引數

info program: 來檢視程式的是否在執行,程序號,被暫停的原因。

centos配置檔案/etc/security/limits.conf##

*               soft    core            unlimited

shutdown –r now進行系統的重啟生效

[root@localhost ~]# ulimit –a //檢視已經生效

core file size          (blocks, -c) unlimited

gdb除錯corefile

檔案:gdb program core

g++ -g main.cpp -o test

./test

產生了core.15737檔案

gdb test core.15737

core was generated by `./test 1 3'.

program terminated with signal 8, arithmetic exception.

#0  0x000000000040063e in main (argc=3, ar**=0x7fffcb90b3c8) at main.cpp:18

18         int c = 5 / 0;

missing separate debuginfos, use: debuginfo-install libgcc-4.8.5-39.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64

gdb工具的使用

gdb是乙個互動式的除錯工具,在linux系統中可以很好地幫助我們完成程式的除錯。它的主要功能有 1.設定斷點,讓程式直接執行至可能出錯的地方 2.檢視變數的值,在除錯過程中隨時檢視我們關注的變數的值。3.修改變數的值,這是vs的偵錯程式所不具有的功能,可以幫助我們更快的定位程式的問題所在。那麼gd...

gdb工具的使用

info registers info all registers 下面這兩個暫時不知道如何使用 info registers reggroup info registers regname four standard register name pc sp fp ps p x pc x i pc ...

(四)GDB工具的使用

寫乙個.c或者.cpp程式都可以用gdb工具來除錯。在linux環境下,用gcc來編譯鏈結,可以用makefile指令碼來做管理,makefile指令碼網上有許多資料,就不專門寫部落格來記錄了。一 準備好原始檔 這裡使用helloworld helloworld.c檔案內容如下 int main r...