2012-09-03 65 views
3

我在python中有一個腳本,它產生了一個我想在gdb中調試的新進程。通常我會按照通常的流程來調試這個子進程。在這個過程中進行睡眠,直到某些條件成立,然後在不同的會話中通過此進程的pid附加gdb,放入一些斷點並使這些條件成立,以便在睡眠後繼續。如何編寫通過gdb調試子進程的自動化工具

我想以自動的方式做到這一點,比如python腳本本身產生一個新的gdb進程,並給我一個gdb提示符?我知道一些關於詛咒的事情,所以我可以做些什麼。但主要問題是如何在python中產生一個交互過程(gdb在這裏),以及如何給用戶提供gdb提示,我沒有太多想法。任何幫助表示讚賞。

回答

0

如果您從終端以交互方式運行python進程,只需正常運行「gdb」(例如使用os.system())作爲python進程的子進程。它將繼承終端並像接受shell一樣接管stdio。 (如果你不是以交互方式運行它,你需要通過「給我一個gdb提示符」來解釋你的意思)。另外,如果你知道你將來會在調試過程中進行調試,那麼最好在gdb之下產生一個進程,而不是讓它停在正確的位置,附加它。

0

在這種情況下,可以使用expect或pexpect python庫來完成該操作。

簡單Pexpect的用法下面的例子:

import pexpect 
child = pexpect.spawn("mc") 
child.interact() # will return when mc finish