2012-11-27 48 views
2

在Python中記錄調試函數調用的最簡單方法是什麼?我通常對特定功能或給定類中的所有功能感興趣。或者有時甚至是所有調用特定對象屬性的函數。看到調用參數也是有用的。觀察在Python中調用哪個函數

我可以想象爲所有這些編寫裝飾器,但是我仍然必須在不同的地方修改源代碼。寫一個修飾所有方法的類裝飾器並不那麼簡單。

有沒有解決方案,我不必修改我的源代碼?理想情況下,Python不會太慢。

+4

爲什麼不使用Python的[內置調試工具](http://docs.python.org/2/library/debug.html)? –

+0

你可以在'調試模式'下修改'object'本身並重新配置'__getattribute__','__setattr__'和'__call__',然後使用某種過濾機制來定義你想要記錄哪些東西,哪些不是。儘管@ StevenRumbalski的問題值得首先回答。 –

+0

http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script可能的副本,如果你對通話計數感興趣等 – aquavitae

回答

1

你應該能夠使用sys.setprofile()或者sys.settrace()來實現你想要的。它們都讓你定義一個函數,當特定的「事件」發生時被調用,比如函數調用,並且傳遞可用於確定被調用的函數/方法的附加信息並檢查它的參數。

如果環顧四周,可能會有示例使用代碼作爲一個很好的起點。

1

除了裝飾器,對於Python> = 3.0,您可以對類使用新的__getattribute__方法,每次調用該對象的任何方法時都會調用該方法。 你可以看看Lutz的「學習Python」第31,37章。

+0

'__getattribute__'也存在於Python 2中,作爲Python 2.2中引入的新樣式類的一部分。不確定你的意思是「除裝飾者」... – martineau