如何在使用 VS Code Python 调试控制台时查看父作用域中的变量

dlaz

当我在另一个脚本导入的函数中设置断点时,我希望能够从 VS Code Python 调试控制台中查看父范围内的变量。这可能吗,也许通过修改launch.json

可重现的例子:

我有两个文件,scratch_script.pyscratch_function.py. 它们存在于同一目录中。

我在下面的评论指示的地方放置断点。

内容scratch_script.py

import scratch_function

parent_scope_var = 'I disappear'

scratch_function.scratch_function() # breakpoint on this line

pass # breakpoint on this line

内容scratch_function.py

def scratch_function():
    child_scope_var = 'I appear'
    pass # breakpoint on this line

我从scratch_script.py.

在第一个断点处,我可以parent_scope_var在 Python 调试控制台中查看,但不是child_scope_var. 到目前为止,一切都很好。

当我进行到第二个断点时,我可以查看child_scope_var,这很棒。但现在我无法查看parent_scope_var

NameError: name 'parent_scope_var' is not defined

在第三个断点上,parent_scope_var在 Python 调试控制台中再次看到了 ,但没有看到child_scope_var... 这是我所期望的。

parent_scope_var所以,我唯一的困惑是,为什么在被调用函数的断点处暂停时无法查看?变量仍然存在,对吗?只是在父范围内?

家乐都

是的,因为当你调试到第二个断点时,python 会执行调用函数。此时,python将打开该scratch_function.py文件。

第一个断点:

在此处输入图像描述

第二个断点:

在此处输入图像描述

它只会显示当前文件中存在的parent_scope_var变量,而文件中没有变量scratch_function.py,python解释器找不到parent_scope_var,所以watch面板提示错误:NameError: name 'parent_scope_var ' is not defined

在此处输入图像描述

但正如您可能猜到的那样,该变量此时仍然存在,就在scratch_script.py文件中。此时可以打开scratch_script.py文件,将鼠标悬停在parent_scope_var变量上,此时vscode会清晰的显示出变量值。

在此处输入图像描述

附带说明一下,您还可以在CALL STACK面板中看到上一个parent_scope_var变量。

在此处输入图像描述

PS:调试时在代码文件中内联显示变量值的设置:

//file:settings.json
{
    "debug.inlineValues": "on",  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章