我正在通过 gdb 运行应用程序,并且我想在任何时候访问/更改特定变量时设置断点。有没有这样做的好方法?我也对在 C/C++ 中监视变量以查看它是否/何时更改的其他方法感兴趣。
原文由 TJ Seabrooks 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在通过 gdb 运行应用程序,并且我想在任何时候访问/更改特定变量时设置断点。有没有这样做的好方法?我也对在 C/C++ 中监视变量以查看它是否/何时更改的其他方法感兴趣。
原文由 TJ Seabrooks 发布,翻译遵循 CC BY-SA 4.0 许可协议
您要查找的内容称为 watchpoint 。
用法
(gdb) watch foo
:观察 变量 的值 foo
(gdb) watch *(int*)0x12345678
:观察 地址 指向的值,转换成你想要的任何类型
(gdb) watch a*b + c/d
:观察任意 复杂的表达式,在程序的母语中有效
观察点分为三种:
您可以选择更适合您需要的。
有关更多信息,请查看 此 内容。
原文由 Paolo M 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
watch 只在写时中断, rwatch 让你在读时中断, awatch 让你在读/写时中断。
您可以在内存位置设置读取观察点:
但一个限制适用于 rwatch 和 awatch 命令;您不能在表达式中使用 gdb 变量:
所以你必须自己扩展它们:
编辑: 哦,顺便说一句。您需要硬件 或软件支持。软件显然要慢得多。要了解您的操作系统是否支持硬件观察点,您可以查看 can-use-hw-watchpoints 环境设置。