【问题标题】:Can I have gdb break on read/write from an address? [duplicate]我可以从地址读取/写入 gdb 中断吗? [复制]
【发布时间】:2011-06-28 18:47:16
【问题描述】:

可能重复:
Can I set a breakpoint on 'memory access' in GDB?

我在内存中有一个特定位置正在损坏,我希望能够准确地看到写入该位置的内容。有什么方法可以让 gdb 中断对该特定地址的内存访问?

【问题讨论】:

    标签: c++ c debugging gdb


    【解决方案1】:

    是的。
    使用 Watchpoints
    watch - 仅在写入时中断(并且仅在值更改时)
    rwatch - 在读取时中断,和
    awatch - 读/写中断。

    来自一些互联网资源的更详细的简介:

    观看
    watch 是 gdb 设置数据断点的方式,如果指定位置的内存发生变化,它将停止程序的执行。

    可以在变量名或任何地址位置设置观察断点。

    watch my_variable
    watch *0x12345678
    where 0x12345678 is a valid address.
    

    rwatch
    rwatch (read-watch) 断点会在程序尝试从变量或内存位置读取时中断代码的执行。

    rwatch iWasAccessed
    rwatch *0x12345678
    where 0x12345678 is a valid address.
    

    手表
    如果变量或内存位置被写入或读取,awatch 或访问手表会中断程序的执行。总之,awatches 是手表和 rwatches 合二为一。创建一个断点比创建两个单独的断点更方便。

    awatch *0x12345678
    where 0x12345678 is a valid address.
    

    【讨论】:

    • 不知何故你正在写 × 代替 x...
    • @Alok 在读或写中断之间使用awatch时有何不同?
    • 有什么办法可以看大片内存(几个字宽)?
    • @Alok lldb 中 awatch 或 rwatch 的等效命令是什么?
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    相关资源
    最近更新 更多