我會在程序啓動時使用sys.settrace
來註冊一個自定義的跟蹤函數。將爲每行代碼調用custom_trace_function。然後,您可以使用該功能將由heapy或meliae收集的信息存儲在文件中供以後處理。
這是一個非常簡單的例子,其記錄hpy.heap的輸出()每一秒,以純文本文件:
import sys
import time
import atexit
from guppy import hpy
_last_log_time = time.time()
_logfile = open('logfile.txt', 'w')
def heapy_profile(frame, event, arg):
currtime = time.time()
if currtime - _last_log_time < 1:
return
_last_log_time = currtime
code = frame.f_code
filename = code.co_filename
lineno = code.co_firstlineno
idset = hpy().heap()
logfile.write('%s %s:%s\n%s\n\n' % (currtime, filename, lineno, idset))
logfile.flush()
atexit.register(_logfile.close)
sys.settrace(heapy_profile)
你可以用http://docs.python.org/devguide/gdb.html來做到嗎,如果你關心的是在C世界中發生的事情? – agf
如果有一種方法可以定期自動運行gdb,那麼C視角就可以了 - 有沒有這樣的方法? – Tim
一個很好的問題,我很想知道,所以我加了一個賞金。 – bgw