gdb 斷點設定(二)watch

2021-06-16 07:44:21 字數 1246 閱讀 5728

2、watch

watch [-l|-location] expr [thread threadnum] [mask maskvalue]

-l 與 mask沒有仔細研究,thread threadnum 是在多執行緒的程式中限定只有被執行緒號是threadnum的執行緒修改值後進入斷點。

經常用到的如下命令:

watch

為表示式(變數)expr設定乙個觀察點。變數量表示式值有變化時,馬上停住程式。

表示式可以是乙個變數

例如:watch value_a

例如:watch *(int *)0x12345678 可以檢測4個位元組的記憶體是否變化。

表示式可以是乙個複雜的語句表示式:

例如:watch a*b + c/d

watch 在有些作業系統支援硬體觀測點,硬體觀測點的執行速度比軟體觀測點的快。如果系統支援硬體觀測的話,當設定觀測點是會列印如下資訊:

hardware watchpoint num: expr

如果不想用硬體觀測點的話可如下設定:

set can-use-hw-watchpoints

watch兩個變種 rwatch,awatch,這兩個命令只支援硬體觀測點如果系統不支援硬體觀測點會答應出不支援這兩個命令的資訊:,

rwatch

當表示式(變數)expr被讀時,停住程式。

awatch

當表示式(變數)的值被讀或被寫時,停住程式。

info watchpoints

列出當前所設定了的所有觀察點。

watch 所設定的斷點也可以用控制斷點的命令來控制。如 disable、enable、delete等。 

可以為停止點設定執行命令

commands [bnum]

... command-list ...

end

為斷點號bnum指寫乙個命令列表。當程式被該斷點停住時,gdb會依次執行命令列表中的命令。

例如:break foo if x>0

commands

printf "x is %d/n",x

continue

end斷點設定在函式foo中,斷點條件是x>0,如果程式被斷住後,也就是,一旦x的值在foo函式中大於0,gdb會自動列印出x的值,並繼續執行程式。 

注意:watch 設定也是斷點,如果除錯的時候設定的斷點(任何種類的斷點)過多的時候,watch斷點會被忽略,有時候沒有任何提示,

這是我在測試的時候發現的,只有把多餘的斷點刪除後才可用。

GDB 斷點設定

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式 斷點 breakpoint 在 的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式 可以通過info breakpoints n 命令檢視當前斷點資訊。此外,還有如下幾個配套的常...

GDB(設定斷點)

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式 斷點 breakpoint 在 的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式 可以通過info breakpoints n 命令檢視當前斷點資訊。此外,還有如下幾個配套的常...

Linux程式設計基礎 GDB(設定斷點)

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式 斷點 breakpoint 在 的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式 可以通過info breakpoints n 命令檢視當前斷點資訊。此外,還有如下幾個配套的常...