我有一個很大的源代碼樹,其目錄中有幾個文件。每次調用任何這些函數時,我都希望gdb中斷,但不想指定每個文件。我試過設置break /path/to/dir/:*
,break /path/to/dir/*:*
,rbreak /path/to/dir/.*:*
但是他們都沒有捕獲該目錄中的任何功能。我怎樣才能讓gdb做我想做的事?gdb可以在目錄中的每個函數中設置中斷嗎?
1
A
回答
0
您可以使用現代gdb附帶的Python腳本執行此操作。有兩種選擇:一種是列出所有符號,然後如果它們包含所需的目錄,則在合適的位置創建斷點類的實例以設置斷點。 (對不起,我不記得如何得到所有符號的列表,但我認爲你可以這樣做。)
你沒有說過爲什麼你需要這樣做,但取決於你的用例替代方案可能是使用可逆調試 - 即讓它崩潰,然後退後一步。您可以使用gdb的內置可逆調試,或從根本上提高了性能,見UndoDB(http://undo-software.com/)
+0
我找不到如何列出GDB的Python API中的所有符號,並且Tromey表明它不可能:http://stackoverflow.com/a/30032690/895245我會在回答/配置文件中提到您與其共同創建的撤消。我不懷疑它更有效率。 :-) – 2015-07-17 20:12:48
1
似乎沒有直接的辦法做到這一點:
rbreak file:.
似乎不接受的目錄,只有文件。另外請注意,你想點.
,沒有星號*
- 似乎沒有辦法遍歷了Python API中的符號,請參閱https://stackoverflow.com/a/30032690/895245
我已經找到了最好的解決方法是遍歷使用Python API的文件,然後調用rbreak
與這些文件:
import os
class RbreakDir(gdb.Command):
def __init__(self):
super().__init__(
'rbreak-dir',
gdb.COMMAND_BREAKPOINTS,
gdb.COMPLETE_NONE,
False
)
def invoke(self, arg, from_tty):
for root, dirs, files in os.walk(arg):
for basename in files:
path = os.path.abspath(os.path.join(root, basename))
gdb.execute('rbreak {}:.'.format(path), to_string=True)
RbreakDir()
使用範例:
source a.py
rbreak-dir directory
由於gdb.execute
調用,這很醜,但似乎工作。
但是,如果你有很多目錄下的文件太慢了。
我的測試代碼是my GitHub repo。
相關問題
- 1. gdb可以設置爲在任何投擲中斷嗎?
- 2. gdb可以在每次中斷時打印特定變量嗎?
- 3. gdb掛鉤設置中斷
- 4. gdb,在文件中的所有函數上設置斷點
- 5. 我可以在一個函數中設置一個狀態嗎?
- 6. 如何使用共享庫函數在gdb中設置斷點
- 7. 我可以爲每個目錄設置摩卡超時嗎?
- 8. 在C文件中設置GDB斷點
- 9. 我們可以在GDB中設置鍵綁定嗎?
- 10. Arduino中斷函數調用另一個函數可以嗎?
- 11. 我可以在每個工作表的Excel中設置ErrorCheckingObjects嗎?
- 12. 我可以在C#中設置每秒MediaElement的幀數嗎?
- 13. 你可以在Xcode中創建每個用戶的項目設置嗎?
- 14. GDB在對象函數調用中斷
- 15. 如何在每個系統或庫函數調用中使GDB中斷?
- 16. 是否可以在GDB中命名一箇中斷點?
- 17. 我可以在包含的代碼中設置斷點嗎?
- 18. 在gdb-many-window中設置斷點沒有可視光標
- 19. 在Javascript中,我可以在更新函數中放置一個OnTrigger函數嗎?
- 20. 我可以在javascript中設置兩個其他函數的setInterval參數嗎?
- 21. Firebug可以在外部JavaScript文件中設置斷點嗎?
- 22. 我可以在Cocoa框架代碼中設置斷點嗎?
- 23. 你可以在UserControl中設置JavaScript斷點嗎?
- 24. 在SSMS中調試時可以設置條件斷點嗎?
- 25. 我可以在ntdll.dll!_LdrpInitializeProcess中設置斷點嗎?
- 26. 我可以在jsFiddle中設置Firebug斷點嗎?
- 27. 可以調用在ASP.NET中設置爲onclick函數的函數嗎?
- 28. 是否可以在派生構造函數中設置smarty目錄?
- 29. 您可以在Jenkins的每個項目中設置不同的XCode Builder設置嗎?
- 30. 是否可以在Arduino Mega的每個引腳上設置中斷?
相關:[使用gdb停止程序,當它使用從文件X中的任何功能](http://stackoverflow.com/questions/475283/using-gdb-stop-the-program-when-it-is-使用-任何功能-從文件-X)。 – 2015-04-12 16:22:32