在 x86 GDB 上使用一些特殊的硬件资源(调试寄存器?)来设置观察点。在某些情况下,当资源不足时,GDB 会设置观察点,但它不起作用。有没有办法以编程方式监控 Linux 上这些资源的可用性?也许在procfs中的一些信息,或其他东西。我需要这些信息来选择池中的机器进行调试。
来自 GDB Internals: “由于它们依赖于硬件资源,因此硬件断点的数量可能会受到限制;当用户要求更多时,gdb 将开始尝试设置软件断点。(在某些架构上,尤其是 32 位 x86 平台上,gdb不能总是知道是否有足够的硬件资源来插入所有的硬件断点和观察点。在那些平台上,gdb 只有在继续被调试的程序时才会打印错误消息。)"
“请求了太多不同的观察点。(在某些体系结构上,在恢复调试程序之前无法检测到这种情况。)请注意,x86 调试寄存器用于硬件断点和观察点,因此设置过多的硬件断点可能会导致观察点插入失败。”
“32 位 Intel x86 处理器具有特殊的调试寄存器,旨在促进调试。gdb 提供了一个通用函数库,基于 x86 的端口可用于实现对观察点和硬件辅助断点的支持。”