[英]How can I set breakpoints by regular expression in GDB via Python
我想使用Python在GDB中編寫一些行為腳本:給定一個描述一組函數的正則表達式,為匹配的每個函數實例化gdb.Breakpoint
(例如MyBreakpoint
)的子類。
GDB的Python模塊中沒有等效的rbreak
。 我曾想過這樣做:
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = gdb.breakpoints()
# Extract breakpoint strings, delete existing breakpoints, and
# recreate them using my subclass.
for bp in breakpoints:
loc = bp.location
bp.delete()
MyBreakpoint(loc)
...但是這會遭受這樣的問題:可能已經有一些用戶定義的斷點,這會破壞它們。
我的下一個想法是遍歷所有可能使用的函數,並使用Python的re
模塊進行匹配。 但是,似乎沒有任何方法可以列出可用於在Python內部進行破壞的函數。
我的問題是:可以挽救這兩種方法中的任何一種,以使它們可靠地工作,而不會使用戶在交互式會話中設置為破壞狀態。 還是有其他方法可以做到這一點? 還是我必須在“不破壞用戶狀態”上做出妥協?
由於rbreak
創造了新的斷點對象,即使斷點是作為預先存在斷點相同的位置,你可以運行gdb.breakpoints()
之前和執行之后rbreak
看到,加入該斷點。
obreakpoints = gdb.breakpoints();
gdb.execute('rbreak {:s}'.format(regexp))
breakpoints = set(gdb.breakpoints()).difference(set(obreakpoints))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.