Debugging 如何监控在gdb中设置观察点所需的资源?

Debugging 如何监控在gdb中设置观察点所需的资源?,debugging,gdb,cpu-registers,watchpoint,Debugging,Gdb,Cpu Registers,Watchpoint,在x86上,GDB使用一些特殊的硬件资源(调试寄存器?)来设置观察点。在某些情况下,当没有足够的资源时,GDB将设置观察点,但它不会工作。 有没有办法通过编程方式监控Linux上这些资源的可用性?也许是procfs里的一些信息,或者别的什么。我需要此信息来选择池中的计算机进行调试 来自GDB内部: “由于它们依赖于硬件资源,硬件断点的数量可能有限;当用户要求更多时,gdb将开始尝试设置软件断点。(在某些体系结构上,尤其是32位x86平台上,gdb无法始终知道是否有足够的硬件资源插入所有硬件断点和

在x86上,GDB使用一些特殊的硬件资源(调试寄存器?)来设置观察点。在某些情况下,当没有足够的资源时,GDB将设置观察点,但它不会工作。 有没有办法通过编程方式监控Linux上这些资源的可用性?也许是procfs里的一些信息,或者别的什么。我需要此信息来选择池中的计算机进行调试

来自GDB内部: “由于它们依赖于硬件资源,硬件断点的数量可能有限;当用户要求更多时,gdb将开始尝试设置软件断点。(在某些体系结构上,尤其是32位x86平台上,gdb无法始终知道是否有足够的硬件资源插入所有硬件断点和观察点。在这些平台上,gdb仅在继续调试程序时才会打印错误消息。)

请求的不同观察点太多。(在某些体系结构上,这种情况在调试程序恢复之前是无法检测的。)请注意,x86调试寄存器用于硬件断点和观察点,因此设置太多硬件断点可能会导致观察点插入失败

“32位Intel x86处理器具有专门设计的调试寄存器,以方便调试。gdb提供了一个通用函数库,基于x86的端口可用于实现对监视点和硬件辅助断点的支持。”

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

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

[1] 更准确地说,寄存器是由内核多路复用的:与
EAX
寄存器的方式相同。系统上的每个进程和内核本身都使用
EAX
,在(单核)CPU上只有一个
EAX
寄存器,但通过时间切片的魔力,所有寄存器都可以正常工作