我刚刚安装了VS Code和Python扩展,但我无法让调试器工作。每次我尝试使用调试器时,它都会跳过我设置的任何断点并像往常一样运行程序。
我在安装了Python3.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"文件也如下所示。
hello.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 文件"一样,没有在断点处停止。请帮忙!
设置"justMyCode": false
使其在断点处停止:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Debug Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"stopOnEntry": true,
"justMyCode": false
},
]
}
如果您使用的是pytest-cov
模块,您可能还想查看 pytest 配置设置注意:
注意如果安装了
pytest-cov
覆盖率模块,则 VS Code 在调试时不会在断点处停止,因为pytest-cov
使用相同的技术来访问正在运行的源代码。若要防止此行为,请在调试测试时pytestArgs
中包含--no-cov
,例如,通过将"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"}
}
]
}
我经历了相同的行为,并且能够通过通过以下方式安装 Python 的虚拟环境来解决它:
[MyProjectFolder] venv
通过输入命令
python -m venv [MyProjectFolder]venv
在控制台中。
VS Code 似乎完全期望这种文件夹结构。
在我直接在我的项目文件夹中安装 venv 文件夹结构之前,即
[MyProjectFolder] Scripts
[MyProjectFolder] Lib
[MyProjectFolder] Include
[MyProjectFolder] pyvenv.cfg
这不起作用并导致完全描述的调试问题。
仅作为参考:VS Code 版本 1.52.1 和 Python 3.8.5
从Python 3.9降级到3.8对我有用。
VC Code 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.7 升级到版本 3.9 时,我遇到了同样的问题。后来我发现旧版本是 32 位,而我升级到的新版本是 64 位,这显然导致了问题。卸载 64 位版本并安装 Python 3.9 的 32 位版本解决了我的问题,然后我能够再次使用 Visual Studio Code 断点功能。
无断点工作的另一个来源是elevate
:
try: # https://pypi.org/project/elevate/
from elevate import elevate
except ModuleNotFoundError: # install it if not found
subprocess.call([sys.executable, "-m", "pip", "install", 'elevate'])
finally:
from elevate import elevate
# require elevated permissions right away...
elevate()
elevate()
命令将程序作为新的(子)进程重新启动,因此整个文件变得不可断点。 来自作者:
在 Windows 上,新进程的标准流不会附加到父进程,这是 UAC 的固有限制。
在Windows中,要在VS Code中调试需要以管理员身份运行的python应用程序,解决方法如下:
- 关闭 VS 代码。 右键单击VS
- 代码图标,选择"以管理员身份运行"。
Linux 用户可能会对sudo code
做同样的事情。 现在,该进程最初将以管理员身份生成,因此对elevate()
的调用不执行任何操作,并且整个文件都是可调试的。
对于每个来这里寻找与python单元测试中的断点相关的解决方案的人:
-
如果尚未完成,请添加配置文件,即
launch.json
,如 VSCODE Python 调试教程中所述。 -
对我来说,以下配置设置有效,因此设置
cwd
(由于src
和test
文件夹)和purpose
(另请参阅此处)是必不可少的。
"version": "0.2.0",
"configurations": [
{
"name": "Python: Test Cases",
"type": "python",
"request": "launch",
"cwd": "${workspaceFolder}/afinad/src",
"purpose": [
"debug-test"
],
"console": "integratedTerminal",
}
]
调试愉快!
我最近发现(2020 年 5 月 5 日)使用 Python 3.9 作为解释器没有命中断点。安装 3.8,它将再次开始工作。
我的问题是我将断点放在函数声明本身的行上,即def foo(x):
行,而不是将断点放在函数内部的第一个非注释行上。
如果函数的第一行是注释,调试器将假定你打算将断点放在函数声明的行上并将断点移回,因此请务必确保不要将断点放在注释上!
调试器的另一个源不在断点处停止:来自另一个目录的同音异义词文件在 VS Code 中打开。
事实上,VS Code 可以在任何 Python 文件上设置断点,甚至在 Python 项目的目录之外;如果文件的路径与 launch.json 中的路径不匹配,则不会命中"program": [your-file-name-here]
条目,则不会命中断点。
例如:Python 源文件的副本位于 dist/lib 下,这是 setuptools 的输出(运行:python setup.py bdist_wheel
生成它们)。
如果未通过.gitignore
排除dist/lib
,则其内容将显示在搜索结果侧边栏中,并且可以错误地单击打开。
警告:如果 launch.json 配置"program": "${file}"
,则上述内容不成立。
我再次(重新)下载了VS Code:https://code.visualstudio.com/断点必须在悬停时显示,并与我正在处理的 python 文件的Run and Debug
一起运行。
此外,在调试器按钮(单步执行/进入等)必须通过代码行之前,我必须解决代码中的语法错误
在过去的一个小时里,我一直在为此而斗争,它终于通过将我的 python 文件从 camelCase.py 重命名为 snake_case.py