小编典典

看着gdb中的内存范围?

linux

我正在调试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手册的引用

因此:如何查看整个内存区域?


阅读 693

收藏
2020-06-03

共1个答案

小编典典

如果将GDB 7.4与Valgrind 3.7.0一起使用,那么您将拥有无限的“模拟”硬件观察点。

在Valgrind下启动程序,提供参数, --vgdb=full --vgdb-error=0 然后使用GDB连接到它(target remote | vgdb)。然后你就可以,例如watchawatchrwatch做一个内存范围 rwatch (char[100]) *0x5180040

有关
更多详细信息,请参见Valgrind关于gdb集成的用​​户手册。

2020-06-03