c - 在 gdb 中观察内存范围?

标签 c linux debugging gdb

我正在 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 手册的引用,因此它不是很有启发性:How can gdb be used to watch for any changes in an entire region of memory?

那么:我怎样才能观看整个内存区域?

最佳答案

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

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

参见 the Valgrind user manual on gdb integration了解更多详情

关于c - 在 gdb 中观察内存范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11004374/

相关文章:

linux - 为什么它总是向我显示存在()的错误?

c - 自复制程序

java - 如何知道我是否在使用 Java EE?

java - 从 SQLiteDatabase.execSQL 获取生成的查询

JavaScript 调试符号

c - 尝试 printf a &a_variable

c++ - 如何在 dev c 中使用 gcc4.7.2 的 GMP 库

c++ - 用于 makefie 构建的 C++ 程序的图形化免费调试器 (Windows XP)

mySQL C API 多语句

C 开关/案例宏,多个案例