pycharm卡死在Connected to pydev debugger

版本

2024.3.2

排查链路

第一阶段

第一阶段:连接建立逻辑(握手期)

排查逻辑: 确认"是谁卡住了谁"。

调试器启动: PyCharm 启动一个本地端口(通常是随机的)。

进程注入: PyCharm 调用 Python 解释器运行 uvicorn 模块。

握手: pydevd 脚本注入到 uvicorn 进程中,尝试反向连接 PyCharm 开启的端口。

卡点: 如果你看到 Connected...,说明 TCP 连接已经建立。此时卡死,说明是在执行 代码注入(Code Injection) 或 断点同步 时卡住了。

诊断建议: 暂时取消所有断点。如果取消断点能跑通,说明是 断点扫描逻辑 在大型库或 C 扩展中死循环了。

第二阶段

排查逻辑: FastAPI 的特殊性在于它是一个网络应用,通常涉及父子进程。

父进程: 负责监听文件变化(Reload 模式)或管理 Worker。

子进程: 真正运行 FastAPI App 的地方。

卡点: PyCharm 默认只挂载到父进程。如果父进程在等待子进程信号,而子进程因为调试器尝试挂载(Attach)导致的时序问题挂起了,就会出现全线停摆。

逻辑证据: 这就是为什么我要让你确认 reload 是否开启。reload=True 会强制产生 multiprocessing 行为,这是调试器的天敌。

第三阶段

第三阶段:执行流阻塞逻辑(运行期)

排查逻辑: 排除环境干扰,确认执行流是否进入了你的 main.py

路径搜索: uvicorn 寻找 main:app。如果 PYTHONPATH 没设对,它可能在寻找模块时阻塞。

初始化阻塞: FastAPI 开始实例化(加载路由、连接数据库、依赖注入)。

卡点: 如果你的代码里有同步阻塞的操作(如同步 DB 驱动),它会占住事件循环(Event Loop)。由于调试器也是通过 Hook 事件循环来工作的,这会导致调试器指令无法被处理。

验证动作: 在 main.py 最顶层写 print("Entry")。如果没有打印,逻辑死在 模块导入阶段;如果有打印,逻辑死在 App 实例化阶段。

因为我没有用reload的,所以我需要验证是假死,还是真死

在main.py的最顶行插入下面的

python 复制代码
import os
print(f"--- PID: {os.getpid()} 进程已启动 ---")

如果 Console 输出了这句话:说明 Python 引擎没死,是 PyCharm 的断点系统在 Uvicorn 的异步循环里"迷路"了。

如果 Console 没输出:说明逻辑死在 uvicorn 模块加载阶段,是调试器注入冲突。

  1. 关闭"多进程"追踪逻辑
    虽然你没开 reload,但 PyCharm 的 --multiprocess 参数会强制调试器去监控所有 os.fork 或 subprocess。Uvicorn 即使在单进程模式下,其底层依赖(如 watchfiles 或某些 C 扩展)也可能触发调试器的监控钩子导致卡顿。

操作:

进入 Settings -> Build, Execution, Deployment -> Python Debugger。

取消勾选 Attach to subprocess automatically while debugging。

逻辑:强制调试器只盯着主进程,不要去管 Uvicorn 内部可能分叉出的子逻辑,看能否绕过卡死。

  1. 环境变量"降级"调试器
    这是最底层的逻辑干扰排查。PyCharm 2024.3 默认使用较新的加速方案,可能与当前的 uvicorn 底层不兼容。

在配置的 Environment Variables 中添加:

PYDEVD_USE_CYTHON=NO(禁用 C 扩展加速)

PYDEVD_USE_FRAME_EVAL=NO(禁用帧评估器加速)

逻辑:将调试器退回到纯 Python 实现的"稳健模式",排除由于 C 指针操作或帧拦截导致的死锁。

如果main.py没死,那么在每个import后面加入print(1) print(2) 看看是卡死在哪一步

结果我这里直接run可以,debug就卡死了

最后发现是开了VPN

相关推荐
iAm_Ike4 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt4 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
旦莫5 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
知识领航员6 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
如何原谅奋力过但无声8 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表
deephub8 小时前
2026 RAG 选型指南:Vector、Graph、Vectorless 该怎么挑
人工智能·python·大语言模型·rag
狐狐生风10 小时前
使用 UV 创建并运行 Python 项目(完整步骤)
python·uv
噜噜噜阿鲁~10 小时前
python学习笔记 | 9.2、模块-安装第三方模块
笔记·python·学习
现代野蛮人10 小时前
【深度学习】 —— VGG-16 网络实现猫狗识别
网络·人工智能·python·深度学习·tensorflow
一个小猴子`10 小时前
Pytorch快速复习
人工智能·pytorch·python