【问题标题】:Python Debug Log Tool to trace execution AFTER program has finished?Python 调试日志工具在程序完成后跟踪执行?
【发布时间】:2013-01-09 17:23:17
【问题描述】:

我想构建一个工具,在推出新的测​​试代码时可以调用该工具,该工具将捕获和评估所有执行行并将它们打印到文件中,以便在执行完成后很长时间内可以对其进行跟踪和调试.将其视为一个调试器,它评估每一行代码的返回并在另一列中打印该行代码加上该行的返回值,因为它也在运行代码。例如:

Timestamp           File-Line    Source Code                       Debug Watcher        
----------------    ---------    -------------------------------   -----------------
20130109-10:18AM    test.py-1    import mathy  
20130109-10:18AM    test.py-2    x = 1        # inline comments   return: x:1
20130109-10:18AM    test.py-3    ans = divide(x,2)                call: math_functions.py-55:divide(dividend:1, divisor:2) 
20130109-10:18AM    mathy.py-56     return divedend / divisor     divide() function return: 0.5
20130109-10:18AM    test.py-4    print "Got %d"%ans               call: print : "Got 0.5"
etc...

您是否了解在执行通过单独的函数、文件等时如何跟踪执行?这有可能生成大量日志数据,因此可以将其裁剪到某个限制大小。我还必须处理大型数据结构,例如字典、数组等,并创建一些特殊情况来处理这些事情。

我在使用回溯之前创建了类似的东西,但它从来没有完全正确地工作过。只是想知道是否已经存在更精致的东西。如果没有,你会怎么做?谢谢。

【问题讨论】:

    标签: python debugging logging traceback


    【解决方案1】:

    我建议研究两个地方:跟踪装饰器和 sys.settrace。

    跟踪装饰器

    我正在使用这种方法来调试生产代码。请注意,它不会记录执行的每一行 python 代码,也不会评估每个涉及的变量。但是对于我的任务来说已经足够了——它记录了每个函数调用、传递的参数和返回值。 它使用日志框架,因此您可以配置此信息的去向 - 屏幕、日志文件等。 此外,您还需要将跟踪器附加到模块、类或方法才能开始跟踪。

    Trace decorator for debugging

    以下是简短的用法示例:

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
    from trace_decorator import trace, attach
    
    class TClass(object):
        def method(self,arg=1):
            print "using TClass.method()"
            self.method2(3)
    
        def method2(self,arg=2):
            d=1
    
    @trace
    def main():
        t = TClass()
        t.method(2)
    

    和程序输出

    DEBUG:main:>>> main()
    DEBUG:DEBUG:>>> TClass.method( self = <TClass object at 0x25b87d0>, arg = 2 )
    DEBUG:DEBUG:>>> TClass.method2( self = <TClass object at 0x25b87d0>, arg = 3 )
    DEBUG:DEBUG:<<< TClass.method2
    DEBUG:DEBUG:<<< TClass.method
    DEBUG:main:<<< main
    

    有关更多信息和使用示例,请查看link with recipe

    sys.settrace

    您描述的工具听起来很像 python 调试器。举几个python调试器的名字: PyDev Eclipse Plugin has nice one) pdb 但是,当用户选择在代码中评估某些变量的位置时,您不想进行交互式调试,而是希望捕获每一行的程序状态。 无论如何 - python 调试器将是第一个寻找实现此类工具的方法的地方。

    Python 调试器使用 python 的sys.settrace 来放置他们的跟踪处理程序方法。 There are many discussions on stackoverflow site 关于如何使用 sys.settrace 方法。 但是他们中的大多数人都有使用这种方法的预防措施——容易破坏你的程序,使用它会使你的程序运行很慢。

    这是一个基于 sys.settrace 的 python 跟踪工具 - 你可以尝试使用它。请注意,您需要 python 2.7 并且程序应该从命令行启动,而不是某些 IDE 或交互式 shell。 https://code.google.com/p/pytracemonitor/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2020-08-22
      • 2018-01-10
      • 2011-12-21
      相关资源
      最近更新 更多