【问题标题】:Is there a way to take a 'snapshot' of a python debug session at a breakpoint?有没有办法在断点处拍摄 python 调试会话的“快照”?
【发布时间】:2021-01-12 19:32:55
【问题描述】:

有没有办法在 python 调试会话中记录所有局部/全局变量(以及调用堆栈和其他调试信息)的状态(或拍摄“快照”),以便我以后查看?

我使用带有 Microsoft python 扩展的 VSCode 来调试 python。我想要做的是当我遇到如下断点时,有办法保存所有全局/局部变量,这样我就可以继续调试并比较我保存的“快照”和当前状态之间的所有调试信息系统。

有人知道这样做的方法吗?不一定要与 VSCode 兼容,但这很好。

【问题讨论】:

    标签: python debugging visual-studio-code


    【解决方案1】:

    使用globals()locals() 获取当前变量列表。

    例如:

    a = 10
    
    def f():
        i = 0
        j = 3
        print(locals())
        print(globals())
    
    f()
    

    意思:

    {'i': 0, 'j': 3}
    {'a': 10, 'f': ..., other pre-defined variables}
    

    至于保存,也许使用pickledill之类的工具来创建字典的二进制表示并将生成的文件视为快照?

    例如,当我们将变量保存到文件snapshot.pkl时:

    import dill
    
    a = 10
    
    def f():
        i = 0
        j = 3
        with open('snapshot.pkl', 'wb') as fd:
            dill.dump({
                'locals': locals(),
                'globals': globals()
            }, fd)
    
    f()
    

    然后稍后将其加载到另一个文件中:

    import dill
    
    
    with open('snapshot.pkl', 'rb') as fd:
        state = dill.load(fd)
        print(state['locals'])
    

    输出:

    {'i': 0, 'j': 3}
    

    对于调用堆栈,我不确定您是否想要格式良好的调用堆栈或只是获取信息,但您可以通过 traceback 模块使用函数 traceback.format_stack(或 traceback.print_stack )。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多