gdb斷點高階技巧

2021-06-26 22:53:10 字數 1762 閱讀 1249



條件斷點

設定乙個條件斷點,條件由cond指定;在gdb每次執行到此

斷點時,cond都被計算。當cond的值為非零時,程式在斷點處停止。

用法:break [break-args] if (condition)

例如:break main if argc > 1

break 180 if (string == null && i < 0)

break test.c:34 if (x & y) == 1

break myfunc if i % (j+3) != 0

break 44 if strlen(mystring) == 0

b 10 if ((int)$gdb_strcmp(a,"chinaunix") == 0)

b 10 if ((int)aa.find("dd",0) == 0)

condition

可以在我們設定的條件成立時,自動停止當前的程式,先使用break(或者watch也可以)設定斷點,

然後用condition來修改這個斷點的停止(就是斷)的條件。

用法:condition

(conditon)

例如:cond 3 i == 3

condition 2 ((int)strstr($r0,".plist") != 0)

ignore

如果我們不是想根據某一條件表示式來停止,而是想斷點自動忽略前面多少次的停止,從某一次開始

才停止,這時ignore就很有用了。

用法:ignore

count

上面的命令列表示break_list所指定的斷點號將被忽略count次。

例如:ignore 1 100,表示忽略斷點1的前100次停止

為斷點設定命令列表

設定乙個斷點並且在上面中斷後,我們必須會查詢一些變數或者做一些其他動作。

如果這些動作可以一起呵成,豈不妙哉!使用命令列表(commands)就能實現這個

功能。步驟:

1.建立斷點。

2.使用commands命令

用法:commands

例如:(gdb) commands 1

type commands for when breakpoint 1 is hit,one per line.

end with a line saying just "end".

>silent

>print "n= %d \n",n

>continue

>end

檔案記錄 :

斷點2在open函式開頭

(gdb) commands 2

type commands for when breakpoint 2 is hit,one per line.

end with a line saying just "end".

>x/s $r0

>continue

>end



GDB高階技巧

本文主要示例一些平常較少使用到的gdb功能,掌握這些用法有助於提高gdb除錯和解決問題的能力。1 檢視巨集 預設情況下,在gdb中是不能檢視巨集的值及定義的,但通過如下方法,則可以達到目的 編譯源 時,加上 g3 gdwarf 2 選項,請注意不是 g 必須為 g3 檢視巨集的值使用命令p,這和檢視...

GDB高階技巧

gdb高階技巧 yijian 2009 2 22 難得有雅興,邊動手邊記錄操作步驟,本文主要示例一些平常較少使用到的gdb功能,掌握這些用法有助於提高gdb除錯和解決問題的能力。1 檢視巨集 預設情況下,在gdb中是不能檢視巨集的值及定義的,但通過如下方法,則可以達到目的 編譯源 時,加上 g3 g...

gdb 條件斷點

gdb 條件斷點 1.有時候,我們需要斷點在迴圈的某個條件處時,比如以下 include int main int argc,char argv return 0 2.開始編譯 cc g main.c將生成a.out 3.開始斷點 gdb a.out l l命令用於檢視 4.通過以上命令可以看到 m...