我可以在GDB中的'內(nèi)存訪問'上設(shè)置斷點嗎?我正在通過gdb運行應用程序,我想在訪問/更改特定變量的任何時候設(shè)置斷點。有這么好的方法嗎?我也有興趣用其他方法來監(jiān)視C / C ++中的變量,以查看它是否/何時發(fā)生變化。
3 回答

ABOUTYOU
TA貢獻1812條經(jīng)驗 獲得超5個贊
手表上只寫符,rwatch讓你讀破發(fā),并awatch讓你打破的讀/寫。
您可以在內(nèi)存位置設(shè)置讀取觀察點:
gdb$ rwatch *0xfeedfaceHardware read watchpoint 2: *0xfeedface
但是一個限制適用于rwatch和awatch命令; 你不能在表達式中使用gdb變量:
gdb$ rwatch $ebx+0xec1a04fExpression cannot be implemented with read/access watchpoint.
所以你必須自己擴展它們:
gdb$ print $ebx $13 = 0x135700gdb$ rwatch *0x135700+0xec1a04fHardware read watchpoint 3: *0x135700 + 0xec1a04fgdb$ cHardware read watchpoint 3: *0x135700 + 0xec1a04fValue = 0xec34daf0x9527d6e7 in objc_msgSend ()
編輯:哦,順便說一下。您需要硬件或軟件支持。軟件顯然要慢得多。要了解您的操作系統(tǒng)是否支持硬件觀察點,您可以查看can-use-hw-watchpoints環(huán)境設(shè)置。
gdb$ show can-use-hw-watchpointsDebugger's willingness to use watchpoint hardware is 1.

慕后森
TA貢獻1802條經(jīng)驗 獲得超5個贊
我只是嘗試了以下內(nèi)容:
$ cat gdbtest.c int abc = 43; int main() { abc = 10; } $ gcc -g -o gdbtest gdbtest.c $ gdb gdbtest ... (gdb) watch abc Hardware watchpoint 1: abc (gdb) r Starting program: /home/mweerden/gdbtest ... Old value = 43 New value = 10 main () at gdbtest.c:6 6 } (gdb) quit
所以看起來可能,但你確實需要一些硬件支持。
添加回答
舉報
0/150
提交
取消