我正在研究一个Python项目,并且我经常使用VS Code Python调试器,使用断点或仅使用跨步/进入工具来了解我的代码如何执行。
在对单个Python文件进行了一些更改之后,调试器开始表现异常。 虽然脚本本身按预期执行(基于日志和预期的副作用),但是当我使用调试器逐步浏览脚本时,它会跳过显然正在执行的行,并停止运行显然没有执行的行。
例如,在设置了早期断点并仅使用“ Step Over”来浏览脚本的执行后,调试器依次突出显示了以下几行:
...(多行)
同样,我可以清楚地看出这不是代码的执行方式。参考上面的第5步和第6步:在else情况下,代码生成电子邮件,而在if情况下,代码不生成电子邮件。
如果我将文件恢复为以前的状态,则调试器将正常运行。使用git diff,我可以知道以前的版本与此版本之间在块,括号,空格等方面没有区别。
我错过了什么吗?我不相信我以前从未遇到过这个问题。
答案 0 :(得分:0)
我将尝试解释,假设您拥有代码:
1 if True:
2 if False:
3 a = 1
4 else:
5 b = 2
6 try:
7 c = 3
然后使用调试器运行Python,它在第一行停止。 接下来,您在IDE中删除第二行并获得实际代码:
1 if True:
2 a = 1
3 else:
4 b = 2
5 try:
6 c = 3
许多框架在开发模式下使用看门狗在源文件发生更改时自动重新加载项目(一些调试器也可以针对特定的更改模块即时执行此操作)。但是,如果您的编辑未触发重新加载Python,则会出现脚本按顺序执行行的情况:
并且IDE将在这些行上停止,但声明错误:
答案 1 :(得分:0)
我看到了完全相同的问题(调试期间似乎跳过了行等),这可能是由于ptvsd无法与实际的最新源文件一起使用。通过设法将以下内容添加到我的工作区设置中,我设法解决了这个问题:
"python.experiments.optOutFrom": [
"PtvsdWheels37 - experiment"
],
在没有上述解决方法的情况下,该问题对我来说偶发地出现了-我无法确切地确定发生的时间。我已经为此创建了问题https://github.com/microsoft/vscode-python/issues/11716。