2011-10-24 25 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寄存器,但它通過時間切片的魔力可以正常工作。