VSCode Python调试器在未执行的行上执行步骤,以及在执行的行上执行步骤
我正在从事一个Python项目,我经常使用VS Code Python调试器,使用断点,或者只是使用step over/into工具来理解代码的执行方式 在对单个Python文件进行一些更改后,调试器开始出现异常行为当脚本本身按预期执行时(基于日志和预期的副作用),当我使用调试器逐步执行脚本时,它跳过明显正在执行的行,并在明显没有执行的行上停止。 例如,在设置一个早期断点并仅使用“单步执行”在脚本执行过程中导航后,调试器依次突出显示以下行:VSCode Python调试器在未执行的行上执行步骤,以及在执行的行上执行步骤,python,visual-studio-code,vscode-debugger,Python,Visual Studio Code,Vscode Debugger,我正在从事一个Python项目,我经常使用VS Code Python调试器,使用断点,或者只是使用step over/into工具来理解代码的执行方式 在对单个Python文件进行一些更改后,调试器开始出现异常行为当脚本本身按预期执行时(基于日志和预期的副作用),当我使用调试器逐步执行脚本时,它跳过明显正在执行的行,并在明显没有执行的行上停止。 例如,在设置一个早期断点并仅使用“单步执行”在脚本执行过程中导航后,调试器依次突出显示以下行: if语句(正常[期望根据变量值解析为true]) if
我将尝试解释,假设您有以下代码:
1 if True:
2 if False:
3 a = 1
4 else:
5 b = 2
6 try:
7 c = 3
然后使用调试器运行Python,它将在第1行停止。
接下来,删除IDE中的第2行并获得实际代码:
1 if True:
2 a = 1
3 else:
4 b = 2
5 try:
6 c = 3
许多框架在开发模式下使用看门狗在源文件更改时自动加载项目(也有一些调试器可以为特定更改的模块动态地这样做)。但如果您的编辑没有触发Python的重新加载,那么脚本就会按顺序执行行:
- 1(如果为真)
- 2(如果为假)
- 4(其他)
- 6(尝试)
- 1(如果为真)
- 2(a=1)
- 4(b=2)
- 6(c=3)
"python.experiments.optOutFrom": [
"PtvsdWheels37 - experiment"
],
如果没有上述解决方法,我会偶尔遇到问题——我无法准确地确定问题发生的时间。我已经就此提出了问题。在代码更改后是否重新加载了Python进程?看起来调试器有另一个版本的运行时代码。我不确定你到底在问什么。但是,我已经保存了代码,重新启动了VS代码,并重新安装了VS代码的Python扩展。这有帮助吗?我很抱歉我不清楚。在发布这个问题之前,我采取了所有这些步骤——它们并没有改变任何东西。我的VScode Python调试器今天也开始表现出疯狂的行为。拒绝执行某些代码。有时拒绝正确使用F11。打开调试文件的副本,标题有时是斜体。有时打断别人的评论。等等。我有最新版本1.43.2。谢谢,这很有道理。我以前观察过这种行为,当时我编辑代码时没有保存文件。这一次,我只是没想到这会是给我带来麻烦的同一个基本问题——不仅保存了文件,还重新启动了IDE。对我来说,逻辑上是这样的:是否有某种方法可以确保Python/项目被重新加载?请检查@frost-nzcr4,除非我遗漏了一些东西OP在启动调试过程和出现问题之间没有更改任何代码。你的答案似乎不适用,可能会混淆。如果我确实错过了OPs帖子中您正在解释的相关部分,那么我将得到更正。我刚刚发现VSCode的ptvsd在PyDev.Debugger(也称pydevd 1.3.3)下使用,它太旧了,最近的版本是1.9.0。在以前的版本中,模块热重新加载中存在可能导致此行为的错误。