我正在调试gdb中的程序,并且当访问内存区域0x08049000至0x0804a000时,我希望该程序停止。当我尝试手动设置内存断点时,gdb似乎一次不支持两个以上的位置。
(gdb) awatch *0x08049000 Hardware access (read/write) watchpoint 1: *0x08049000 (gdb) awatch *0x08049001 Hardware access (read/write) watchpoint 2: *0x08049001 (gdb) awatch *0x08049002 Hardware access (read/write) watchpoint 3: *0x08049002 (gdb) run Starting program: /home/iblue/git/some-code/some-executable Warning: Could not insert hardware watchpoint 3. Could not insert hardware breakpoints: You may have requested too many hardware breakpoints/watchpoints.
已经有一个问题在哪里被问到了,答案是,用valgrind可以做到这一点。不幸的是,答案没有包含任何示例或对valgrind手册的引用
因此:如何查看整个内存区域?
如果将GDB 7.4与Valgrind 3.7.0一起使用,那么您将拥有无限的“模拟”硬件观察点。
在Valgrind下启动程序,提供参数, --vgdb=full --vgdb-error=0 然后使用GDB连接到它(target remote | vgdb)。然后你就可以,例如watch或awatch或rwatch做一个内存范围 rwatch (char[100]) *0x5180040
--vgdb=full --vgdb-error=0
target remote | vgdb
watch
awatch
rwatch
rwatch (char[100]) *0x5180040
有关 更多详细信息,请参见Valgrind关于gdb集成的用户手册。