python調試程式碼
- 2020 年 1 月 13 日
- 筆記
我在看一些開源的python項目時,需要知道各個類各個函數之間的調用關係才能看懂程式碼,因此我寫了個方法來跟蹤程式碼的調用過程
導入 系統 從 時間 導入 ctime is_log = True def log_msg (msg,self = None ,debug_file_name = '/tmp/trace.log'): 如果 is_log == False: 返回 嘗試: 引發 異常 除了: f = sys.exc_info()[ 2 ] .tb_frame.f_back fp =打開(debug_file_name, 'a') 如果 self 為None: fp.write('[' + ctime()+ '] <' + f.f_code.co_name + '>' + str(f.f_lineno)+ ':') 其他: fp.write('[' + ctime()+ '] <' + self .__ class __.__ name __ + '。' + f.f_code.co_name + '>' + str(f.f_lineno)+ ':') fp.write(str(msg)+ ' n') fp.close()
大家可以用這個調試方法進行跟蹤調試
用法如下:
原型是:log_msg(msg,self=None,debug_file_name='/tmp/swift.log')
第一個參數是輸出資訊,
第二個參數是所在類,可省略,在類里使用的話填self即可。
第三個參數是輸出的日誌文件,默認為/tmp/swift.log
from swift.common.debuglog import log_msg
log_msg('start')
log_msg('start',self)
log_msg('start',self,'/tmp/abc.log')
輸出內容:包括類名,函數名,行數,時間,輸出資訊
[Thu Jul 7 17:46:15 2011]<__init__>52:start
[Thu Jul 7 17:51:54 2011]<__init__>52:start
[Thu Jul 7 17:52:24 2011]<Swauth.__init__>52:start
[Thu Jul 7 17:57:18 2011]<Swauth.__init__>52:start