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

2024-05-14 00:22:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用VSCode和Microsoft python扩展来调试python。我想做的是,当我点击一个断点时,如下图所示,找到一种保存所有全局/局部变量的方法,这样我就可以继续调试,并在保存的“快照”和系统的当前状态之间比较所有调试信息。 enter image description here

有人知道这样做的方法吗?不必与VSCode兼容,但那会很好


Tags: 方法堆栈状态系统记录全局快照vscode
1条回答
网友
1楼 · 发布于 2024-05-14 00:22:59

使用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)来获得它

相关问题 更多 >