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

问题描述 投票:0回答:2

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

launch.json

可重现的示例:

我有两个文件,

scratch_script.py
scratch_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
运行 VS Code Python 调试器。

在第一个断点处,我可以在 Python 调试控制台中查看

parent_scope_var
,但看不到
child_scope_var
。到目前为止一切顺利。

当我进行到第二个断点时,我可以查看

child_scope_var
,这很棒。但现在我无法查看
parent_scope_var
:

NameError: name 'parent_scope_var' is not defined

在第三个断点上,在 Python 调试控制台中再次看到

parent_scope_var
,但没有看到
child_scope_var
...这正如我所期望的那样。

所以,我唯一的困惑是,为什么在被调用函数的断点处暂停时看不到

parent_scope_var
?变量仍然存在,对吗?就在父范围内?

python debugging visual-studio-code vscode-debugger
2个回答
1
投票

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

scratch_function.py
文件。

第一个断点:

第二个断点:

它只会显示当前文件中存在的变量,而

parent_scope_var
文件中没有
scratch_function.py
变量,python解释器找不到
parent_scope_var
,因此手表面板提示错误:
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",  
}

0
投票

目前可以通过点击调用栈来切换不同的本地变量环境

您需要将

"justMyCode": false
添加到您的启动配置中。

这是我在调试 pytorch nn.Module 时要做的事情 enter image description here

另请参阅 vscode 调试编辑器 可以在运行和调试视图的变量部分或通过将鼠标悬停在编辑器中的源代码上来检查变量。变量值和表达式求值与 CALL STACK 部分中选定的堆栈帧相关。

© www.soinside.com 2019 - 2024. All rights reserved.