调试器不会在 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 如下所示。我尝试通过按绿色箭头和按 F​​5 来使用调试器,但似乎都没有使调试器正常工作。我的“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(因为srctest 文件夹)和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.

根据要求触发VS Code python调试器

VS code配置python开发调试环境

VS code配置python开发调试环境