python调试代码

2020-01-13 15:30:04 浏览数 (1)

我在看一些开源的python项目时,需要知道各个类各个函数之间的调用关系才能看懂代码,因此我写了个方法来跟踪代码的调用过程

代码语言:javascript复制
导入  系统  
从  时间  导入  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

0 人点赞