我正在通过 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 ()
Edit:哦,顺便说一句。您需要任一硬件或软件支持。软件显然要慢得多。要了解您的操作系统是否支持硬件观察点,您可以查看可以使用硬件观察点环境设置。
gdb$ show can-use-hw-watchpoints
Debugger's willingness to use watchpoint hardware is 1.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)