簡體   English   中英

如何在gdb python腳本中設置或修改斷點命令

[英]How to set or modify breakpoint commands in a gdb python script

在gdb python腳本中,如何設置或修改斷點的命令列表?

我可以手動完成。 例如,要更改斷點2的命令列表,在提示符下,我可以輸入:

(gdb) commands 2
Type commands for breakpoint(s) 2, one per line.
End with a line saying just "end".
>info reg rax
>set $rax=0x1234
>end

但是,從gdb python腳本來看,我似乎無法執行多行命令。

gdb.execute("commands 2\ninfo reg rax\nset $rax=0x1234\nend\n")

只是讓我輸出像

(gdb) source blah.py
>

它坐在那里以獲得更多輸入。 在我鍵入end並按Enter之前,它不會繼續。 然后,它只是發出抱怨,表明它在該字符串的commands 2之后沒有正確解析任何內容。

嘗試分別輸入每行無濟於事。 例如腳本:

gdb.execute("commands 2")
gdb.execute("info reg rax")
gdb.execute("set $rax=0x1234")
gdb.execute("end")

在第一次執行期間等待用戶的更多輸入,因此也有類似的問題。 盡管大部分都是希望,但以下操作也不起作用:

gdb.execute(["commands 2","info reg rax","set $rax=0x1234","end"])

使用gdb.breakpoints()可以很容易地以編程方式獲取斷點列表。 這些對象都有一個屬性commands ,可以看到我手動設置或從本地gdb腳本設置的任何命令。 但是,如果我嘗試修改此屬性,它將失敗。 因此,一旦手動設置了某些東西或gdb腳本,Python腳本似乎就無法對其進行編輯。 該API文檔缺少很多有用的信息,但是它確實聲明了https://sourceware.org/gdb/onlinedocs/gdb/Breakpoints-In-Python.html#Breakpoints-In-Python Variable: Breakpoint.commands ... This attribute is not writable.

而且不,對於“從不使用gdb腳本”或“從不手動輸入命令”以及“相反,始終編寫python gdb.Breakpoint子類並將Breakpoint.stop()設置為執行特殊操作,我認為這不是一個有用的答案,並重寫所有現有腳本以使用此類功能”。 我似乎只能找到該解決方法的信息。 但是由於gdb的怪癖,我不願意放棄當前的交互方法。

由於我可以輕松地運行命令來手動完成我想做的事情,因此必須有一種方法可以通過gdb python腳本修改或設置斷點命令。 我該怎么做呢?

我認為目前沒有辦法。

如您gdb.executegdb.execute不支持多行。 這只是Python層的一個限制,從未有人修復過。 (我沒有看到一個bug,所以我提交了bug 22730

另外,斷點的commands字段不可分配。 我為此提交了錯誤22731

您的source想法雖然可怕,但卻可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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