2011-10-24 28 views
2

在x86上,GDB使用一些特殊的硬件资源(调试寄存器?)来设置观察点。在某些情况下,当这些资源不足时,GDB将设置观察点,但它不起作用。 有没有什么办法可以以编程方式监视Linux上这些资源的可用性?也许在procfs中有些信息,或者其他的东西。我需要这些信息来选择池中的机器进行调试。如何监控在gdb中设置观察点所需的资源?

从GDB内幕: “,因为它们依赖于硬件资源,硬件断点可能数量有限;当用户要求更多,GDB会开始尝试设置软件断点(在一些体系,尤其是。在32位x86平台上,gdb并不总是知道是否有足够的硬件资源来插入所有的硬件断点和观察点,在这些平台上,只有在被调试的程序正在被调试的时候,gdb才会打印出错误消息。)“

”请求许多不同的观察点(在某些体系结构中,只有在调试程序恢复后才能检测到这种情况)。请注意,x86调试寄存器既用于h ardware断点和观察点,因此设置太多的硬件断点可能会导致观察点插入失败。“ “

”32位Intel x86处理器具有特别的调试寄存器,旨在便于调试。gdb提供了一个基于x86的端口可用来实现对观察点和硬件辅助断点支持功能的通用库。

回答

1

我需要此信息来选择池中的机器进行调试。

不,你不知道。 x86调试寄存器(有4个)是每个进程资源,而不是每个机器资源[1]。您正在调试的每个进程最多可以有4个硬件观察点。如果其他人在同一台机器上进行调试,则不会互相干扰。

[1]更确切地说,寄存器被内核多路复用:与例如, EAX寄存器。系统上的每个进程和内核本身使用EAX,(单核)CPU上只有一个EAX寄存器,但它通过时间切片的魔力可以正常工作。