簡體   English   中英

如何通過Python在GDB中通過正則表達式設置斷點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM