【发布时间】:2012-05-15 08:19:05
【问题描述】:
在 GDB 中通过watch varname 设置第一个(也是唯一可能的)硬件观察点后,无法通过删除将其删除。
即使我只是退出 GDB,这个观察点似乎在下次重新启动之前都已启用。当我在 GDB 重新启动后尝试设置另一个硬件观察点时,日志中会出现一条内核消息,告诉我,所有硬件观察点都已被占用。似乎和 Setting GDB hardware watchpoint/how to set software watchpoint 中的问题一样,但是因为我需要一个硬件观察点,所以该解决方案不适用。
是否有工具或系统调用来删除这个(或所有)硬件观察点? CPU 是 Core i5,Linux 内核是来自 Ubuntu 11.10 (Oneiric Ocelot) 的 3.0.0-17-generic。
【问题讨论】:
-
这听起来像一个错误。 gdb 使用 ptrace 添加/删除硬件断点。因此,您可以尝试在 strace 下运行 gdb 并查找与硬件断点相关的 ptrace 调用,希望它能给您一些关于正在发生的事情的线索。此外,请确保您运行的是最新的内核和 gdb。尝试上游内核是另一种选择。
-
您如何尝试删除它,会发生什么?您是否尝试过最新的 gdb (7.4)?
-
感谢您的帮助 - 我今天将内核升级到 3.0.0-19,现在我可以创建多个硬件观察点,并且它们会在 gdb 关闭时自动删除。
标签: linux gdb breakpoints watchpoint