gnu的偵錯程式稱為gdb,該除錯工具是乙個互動式工具,在字元模式下工作。gdb作為功能強大的除錯工具,可完成如下的除錯任務。
(1)設定斷點
(2)監視程式變數的值
(3)程式的單步執行
(4)修改變數的值
為了使用gdb除錯工具,在編譯原始檔時必須使用-g選項(即gcc -c -g *.c)加上除錯資訊。另外使用makefile檔案,還可以在makefile中定義cflags變數(cflags = -g)。
下來以乙個簡單的例項來演示gdb的除錯方法。此示例源**如下:
這個程式目的是接受使用者的輸入,並將使用者的輸入列印出來。但是程式的第8行使用了未初始化的字元指標string,因此,編譯並執行之後,將出現斷錯誤。#include #include static char buff[256];
static char* string;
int main()
下面利用gdb工具查詢該程式**現的問題,具體步驟如下。[root@localhost swz] # gcc -o bug -g bug.c
[root@localhost swz] # ./bug
please input a string:hello
segmentation fault
(1)執行gdb bug命令,裝入bug可執行檔案
(2)使用list命令檢視**
(3)使用run命令執行程式
(4)使用where命令檢視程式出錯位置
(5)使用print命令檢視變數
(6)使用quit命令退出gdb偵錯程式
最後得出結果是由於string變數未賦初值導致
1.在gdb中,你可以隨時檢視以下三種變數的值:
全域性變數(所有檔案可見的), 靜態全域性變數(當前檔案可見的), 區域性變數(當前scope可見的),另外變數衝突的情況下可以用域操作符「::」,可以檔案指定或類、函式指定,例如:
file::variable
function::variable
2.固定長度列印陣列資訊
3.修改.gdbinit檔案,該檔案是gdb啟動時讀的乙個配置項,提供了介面定義(gdb) p *array@3
$1 =
(gdb) p *array@10
$2 =
4.檢視記憶體
使用examine命令(簡寫是x)來檢視記憶體位址中的值,語法如下(n、f、u時可選引數):
n:表示顯示記憶體的長度。
f:表示顯示的格式。
u:表示從當前位址往後請求的位元組數。
n/f/u三個引數可以一起使用。例如:
命令:x/3uh 0x54320 表示,從記憶體位址0x54320讀取內容,h表示以雙位元組為乙個單位,3表示三個單位,u表示按十六進製制顯示。
其實用的最多的也最簡單的,就是直接後面帶上數字,每次顯示乙個4位元組的資訊,從低位元組開始數,例如:
(gdb) x /4 0x400670
0x400670: 0x34333231 0x38373635 0x00003039 0x00000000
1.info thread --> 檢視執行緒資訊
如上,前面有「*」號的就是當前執行緒,同時可以使用thread ***進行程序切換:(gdb) info thread 檢視執行緒資訊;
4 thread 4109917088 (lwp 4853) 0xffffe410 in __kernel_vsyscall ()
3 thread 4118309792 (lwp 4852) 0xffffe410 in __kernel_vsyscall ()
2 thread 4126702496 (lwp 4851) 0xffffe410 in __kernel_vsyscall ()
* 1 thread 4156778160 (lwp 4695) 0xffffe410 in __kernel_vsyscall ()
(gdb)
(gdb) thread 2 切換執行緒;
2.多執行緒中加斷點(其實和單執行緒一樣,只要記牢各個執行緒的id就可以輕鬆切換各個斷點)
(gdb) b tnotifyusertask::process() --> 直接對**上進行斷點,無須強調程;
3.多執行緒除錯要記住,多用tbreak來斷點程式,善用watch來跟蹤變數。
4.多執行緒的coredump,多為段錯誤,一般都涉及記憶體非法讀寫,對於core檔案的檢視,上述執行緒操作也是適用的。如果都看不出來,就仔細檢視**,看看是不是在if,return,break,continue這種語句操作是忘記解鎖,還有巢狀鎖的問題,都需要分析清楚了。
linux除錯工具GDB
gdb偵錯程式除錯的物件是可執行檔案,使用gcc或者g 編譯器編譯源 時,必須加上 g才能使目標可執行檔案包含可被除錯的資訊。比如 gcc g o helloworld helloworld.c 編譯並連線程式,使之包含可被除錯資訊 gdb helloworld 使用gdb偵錯程式開啟hellowo...
linux除錯工具gdb用法
1 編譯選項 1.1 gcc g 名 g 付 行 gdb 可能 為 情報 増 生成 実行 大 2.除錯命令 2.1.gdb programname 2.2.gdb args programnmae arg1 arg2 2.3.gdb b n n 行數 break point 設定 gdb b 関數名...
Linux下GDB除錯工具
1.常用的除錯 的方法 不管你使用哪種方法除錯 都需要有足夠的耐性 方法一 在 中加入列印語句 在關鍵語句的前後 函式呼叫 關鍵變數 方法二 使用gdb除錯 原理也是讓程式分步執行,列印關鍵變數的值 1 使用gdb在編譯程式的時候必須加上 g選項 將程式的除錯資訊新增到生成的可執行程式中 gcc m...