有没有办法在断点处拍摄 python 调试会话的“快照”?

Pet*_*eyn 7 python debugging visual-studio-code

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

我使用 VSCode 和 Microsoft python 扩展来调试 python。我想要做的是,当我遇到断点时,如下所示,有一种方法来保存所有全局/局部变量,以便我可以继续调试并比较我保存的“快照”和当前状态之间的所有调试信息系统。 在此输入图像描述

有谁知道有什么方法可以做到这一点?不一定要与 VSCode 兼容,但那就太好了。

tho*_*ice 1

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

例如:

a = 10

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

f()
Run Code Online (Sandbox Code Playgroud)

方法:

{'i': 0, 'j': 3}
{'a': 10, 'f': ..., other pre-defined variables}
Run Code Online (Sandbox Code Playgroud)

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

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

{'i': 0, 'j': 3}
{'a': 10, 'f': ..., other pre-defined variables}
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

输出:

{'i': 0, 'j': 3}
Run Code Online (Sandbox Code Playgroud)

对于调用堆栈,我不确定您是否想要一个格式良好的调用堆栈或只是拥有信息,但您可以简单地通过traceback具有函数traceback.format_stack(或traceback.print_stack)的模块来获取它。