调试器不会在 VS Code for Python 中的断点处停止
Posted
技术标签:
【中文标题】调试器不会在 VS Code for Python 中的断点处停止【英文标题】:Debugger Not Stopping at Breakpoints in VS Code for Python 【发布时间】:2019-11-09 16:56:42 【问题描述】:我刚刚安装了 VS Code 和 Python 扩展,但无法让调试器工作。每次我尝试使用调试器时,它都会跳过我设置的任何断点并像往常一样运行程序。
我在装有 Python 3.7.3 和 Python 扩展的 Windows 10 PC 上使用 VS Code。我按照此处的说明 (https://code.visualstudio.com/docs/python/python-tutorial) 在 C:\python_work\hello 中创建了一个名为“hello”的测试文件夹,并在该文件夹中创建了一个名为“hello.py”的程序。 hello.py 如下所示。我尝试通过按绿色箭头和按 F5 来使用调试器,但似乎都没有使调试器正常工作。我的“launch.json”文件也如下所示。
你好.py:
msg = "Hello World!"
print(msg) # Breakpoint
launch.json:
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "$file",
"console": "integratedTerminal",
"stopOnEntry": true
,
]
我希望底部栏变成橙色,程序在第二行停止,让我可以在预览窗格中检查局部和全局变量。相反,当程序运行时,底部栏保持橙色 1/2 秒,就好像我按下了“在终端中运行 Python 文件”一样,而没有在断点处停止。请帮忙!
【问题讨论】:
对我来说工作正常。发送到终端以启动调试器的内容是什么? 类似这样的东西:cd c:\python_work\hello && cmd /C "set "PYTHONIOENCODING=UTF-8" && set "PYTHONUNBUFFERED=1" && C:\Python\python.exe c:\Users\RohanPC\.vscode\extensions\ms-python.python-2019.6.22090\pythonFiles\ptvsd_launcher.py --default --client --host localhost --port 49389 c:\python_work\hello\hello.py "
如果您可以在github.com/microsoft/vscode-python 提交错误并提供可以重现该问题的 GitHub 项目或文件夹的 zip 文件,那么我们可以查看一下是否可以弄清楚发生了什么。
我刚刚重新安装了Windows,问题就解决了!非常感谢您的帮助。
通常认为每天至少重新安装两次 Windows 是一种好习惯。
【参考方案1】:
设置"justMyCode": false
让它在断点处停止:
"version": "0.2.0",
"configurations": [
"name": "Python: Debug Current File",
"type": "python",
"request": "launch",
"program": "$file",
"console": "integratedTerminal",
"stopOnEntry": true,
"justMyCode": false
,
]
【讨论】:
这行得通……我怎么能猜到这样的事情? 奇怪的是默认情况下它不是“真实的”!我现在面临的另一个问题是,在执行最后一行后它并没有结束调试。它进入“runpy.py”......我应该如何解决这个问题? 如果没有像 *** 这样的资源,我想我永远也解决不了这个问题。 Just My Code 是一组功能,通过隐藏您可能正在使用的优化库的一些细节,例如 .NET Framework 本身(如github.com/OmniSharp/omnisharp-vscode/blob/master/…),可以更轻松地专注于调试代码。但是我正在运行一个我编写的程序,其中包含几行简单的代码,并且没有调用任何模块。谁能说明我为什么需要关闭此功能?【参考方案2】:如果您使用的是pytest-cov
模块,您可能还想看看pytest configuration settings 注意:
注意如果您安装了
pytest-cov
覆盖模块,VS Code 在调试时不会在断点处停止,因为pytest-cov
使用相同的技术来访问正在运行的源代码。为防止这种行为,请在调试测试时将--no-cov
包含在pytestArgs
中,例如将"env": "PYTEST_ADDOPTS": "--no-cov"
添加到您的调试配置中。
请参阅下面的示例配置文件 (launch.json
):
"version": "0.2.0",
"configurations": [
"name": "Debug Tests",
"type": "python",
"request": "test",
"console": "integratedTerminal",
"justMyCode": false,
"env": "PYTEST_ADDOPTS": "--no-cov"
]
【讨论】:
【参考方案3】:我也遇到了同样的问题,通过安装 Python 的虚拟环境可以解决,方法如下:
[MyProjectFolder] \ venv
通过输入命令
python -m venv [MyProjectFolder]\venv
在控制台中。
VS Code 似乎完全期望这种文件夹结构。
在我直接在我的项目文件夹中安装 venv-folder-structure 之前,即
[MyProjectFolder] \ Scripts
[MyProjectFolder] \ Lib
[MyProjectFolder] \ Include
[MyProjectFolder] \ pyvenv.cfg
其中不起作用并导致了所描述的调试问题。
仅供参考:VS Code 版本 1.52.1 和 Python 3.8.5
【讨论】:
这会创建一个 .venv 但不允许我选择 venv 解释器 我认为这与调试点问题无关。您可以选择 Python 解释器执行CTRL+Shift+P
-> Select Python Interpreter
-> Enter interpreter path
感谢您的回答,在运行 python -m venv 命令之前应删除脚本 lib include 和 pyenv.cfg,安装新的 venv 格式然后重新启动 vscode【参考方案4】:
我从 Python 3.7 版升级到 3.9 版时遇到了同样的问题。后来发现老版本是32位的,而我升级到的新版本是64位的,这显然是造成问题的原因。卸载 64 位版本并安装 32 位版本的 Python 3.9 解决了我的问题,然后我可以再次使用 Visual Studio Code 断点功能。
【讨论】:
这对我不起作用。从 Python 3.8.2 x64 到 Python 3.7.8 x32 和调试点仍然不起作用。【参考方案5】:我最近发现(2020 年 5 月 5 日)使用 Python 3.9 作为解释器,断点没有命中。安装 3.8,它将重新开始工作。
【讨论】:
我在 Python 3.8.2 上,调试点对我没有用。 我还尝试进一步降级:我从 Python 3.8.2 x64 转到 Python 3.7.8 x32,但调试点仍然不起作用。【参考方案6】:从 Python 3.9 降级到 3.8 对我有用。
VC 代码 1.56.2 忽略了在 Windows 10 版本 20H2 上运行 Python 3.9 64 位的断点。安装 Python 3.8.10 64 位解决了这个问题。我只需要在 VS 代码中选择 Python 3.8.10 解释器,它现在可以识别断点。不需要更改配置文件,例如我不需要 "justMyCode": false
我意识到这是一个老问题,但我的谷歌搜索将我引向了它。许多以前的答案不再适用。因此,我为 2021 年登陆这里尝试使用 3.9 的其他人发布此修复程序。
【讨论】:
我在 Python 3.8.2 上,调试点对我没有用。 我还尝试进一步降级:我从 Python 3.8.2 x64 转到 Python 3.7.8 x32,但调试点仍然不起作用。 还尝试从 3.9 降级到 3.8,但仍然无法正常工作。如果有人找到了解决方法,请分享!【参考方案7】:我的问题是我将断点放在函数声明本身的行上,所以 def foo(x):
行,而不是把断点放在第一个 non-comment 行 在函数内部。
如果函数的第一行是注释,调试器将假定您打算将断点放在函数声明的行并将断点移回,因此请务必确保您没有将断点放在评论!
【讨论】:
【参考方案8】:对于所有来这里寻找与 python 单元测试中的断点相关的解决方案的人:
如果尚未完成,请添加配置文件,即lunch.json
,如vscode python debugging tutorial 中所述。
对我来说,以下配置设置有效,其中设置cwd
(因为src
和test
文件夹)和purpose
(另见here)是必不可少的。
"version": "0.2.0",
"configurations": [
"name": "Python: Test Cases",
"type": "python",
"request": "launch",
"cwd": "$workspaceFolder/afinad/src",
"purpose": [
"debug-test"
],
"console": "integratedTerminal",
]
调试愉快!
【讨论】:
以上是关于调试器不会在 VS Code for Python 中的断点处停止的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio Code-使用Chrome Debugging for VS Code调试JS
调试 VS Code for Flutter 应用程序时出现问题
VS Code调试Golang提示Failed to continue:Check the debug console for details.