在x86上,GDB使用一些特殊的硬件资源(调试寄存器?)设置监视点。在某些情况下,当没有足够的资源时,GDB将设置监视点,但它无法工作。是否有任何方法以编程方式监视Linux上这些资源的可用性?可能是procfs里的一些信息什么的。我需要这个信息来选择池中的机器进行调试。
来自gdb内部的:“由于它们依赖于硬件资源,硬件断点的数量可能有限;当用户要求更多时,gdb将开始尝试设置软件断点。(在某些体系结构上,特别是32位x86平台上,gdb并不总是知道是否有足够的硬件资源来插入所有的硬件断点和监视点。在这些平台上,GDB只在程序继续调试时打印错误消息。)
“请求了太多不同的监视点。(在某些体系结构中,这种情况在调试程序恢复之前是无法检测的。)请注意,x86调试寄存器既用于硬件断点,也用于监视点,因此设置过多的硬件断点可能导致插入监视点失败。”
32位英特尔x86处理器具有特殊的调试寄存器,旨在方便调试。gdb提供了一个通用函数库,x86端口可用于实现对观察点和硬件辅助断点的支持。
发布于 2011-10-25 03:37:08
我需要这个信息来选择池中的机器进行调试。
不,您没有。x86调试寄存器(有4)是每个进程资源,而不是每台机器资源1。您可以为每个正在调试的进程设置多达4个硬件监视点。如果其他人正在同一台机器上调试,则不会相互干扰。
1更准确地说,寄存器是由内核复用的:与EAX寄存器的方式相同。系统上的每个进程和内核本身都使用EAX,在(单核) CPU上只有一个EAX寄存器,但是通过时间切片的魔力,它都能很好地工作。
https://stackoverflow.com/questions/7874173
复制相似问题