gpt4 book ai didi

c++ - 我可以在GDB中的 'memory access'处设置断点吗?

转载 作者:行者123 更新时间:2023-12-03 04:07:02 27 4
gpt4 key购买 nike

我正在通过 gdb 运行应用程序,并且我想在访问/更改特定变量的任何时间设置断点。有没有好的方法来做到这一点?我还对在 C/C++ 中监视变量以查看它是否/何时发生变化的其他方法感兴趣。

最佳答案

watch 仅在写入时中断,rwatch 让您在读取时中断,awatch 让您在读/写时中断。

您可以在内存位置设置读取观察点:

gdb$ rwatch *0xfeedface
Hardware read watchpoint 2: *0xfeedface

但 rwatch 和 awatch 命令有一个限制;你不能使用 gdb 变量在表达式中:

gdb$ rwatch $ebx+0xec1a04f
Expression cannot be implemented with read/access watchpoint.

所以你必须自己扩展它们:

gdb$ print $ebx 
$13 = 0x135700
gdb$ rwatch *0x135700+0xec1a04f
Hardware read watchpoint 3: *0x135700 + 0xec1a04f
gdb$ c
Hardware read watchpoint 3: *0x135700 + 0xec1a04f

Value = 0xec34daf
0x9527d6e7 in objc_msgSend ()

编辑:哦,顺便说一下。您需要硬件或软件支持。软件显然要慢得多。要了解您的操作系统是否支持硬件观察点,您可以查看can-use-hw-watchpoints环境设置。

gdb$ show can-use-hw-watchpoints
Debugger's willingness to use watchpoint hardware is 1.

关于c++ - 我可以在GDB中的 'memory access'处设置断点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com