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...