在PyCharm中打断点需点击行号左侧灰色区设红点,仅对可执行语句生效;启动Debug须右键选“Debug 'xxx.py'”或按Shift+F9(Win/Linux)/⌃⌥D(macOS),不可点运行按钮;调试时用F7(步入)、F8(步过)、F9(继续到断点)控制执行流。

怎么在PyCharm里打断点并启动Debug模式
PyCharm的调试不是靠运行按钮,而是靠左侧编辑区边缘点击——鼠标移到行号左边的灰色空白处,单击出现一个红点,就是断点。它只对可执行语句生效,比如 print()、if、函数调用行;变量赋值语句(如 a = 1)也能设,但某些优化场景下可能跳过。
启动调试必须用右键菜单或快捷键:右键 → Debug 'xxx.py',或者按 Shift + F9(Windows/Linux)/ ⌃⌥D(macOS)。别误点绿色三角形“Run”,那不会进入调试器。
- 断点默认是“Suspend thread”,即暂停当前线程,不影响其他线程(适合多线程调试)
- 如果想让所有断点都暂停整个进程,需右键断点 → Edit Breakpoint → 勾选
Suspend all - 临时禁用断点:Ctrl+左键点击红点,变成浅红色圆圈;再次点击恢复
单步执行时F7/F8/F9各走哪一步
进入Debug模式后,顶部会出现控制条,但更常用的是快捷键。它们的区别不在“快慢”,而在“是否进入函数内部”:
-
F8(Step Over):执行当前行,不进入函数体。比如遇到result = calculate(x),按F8会直接跑到下一行,calculate()内部逻辑被跳过 -
F7(Step Into):强制进入当前行调用的函数。上例中按F7会跳进calculate()的第一行。但如果该函数是内置函数(如len()、print()),PyCharm默认不进去,需提前在设置里勾选Settings → Build → Debugger → Step into my code only关掉 -
F9(Resume Program):直接运行到下一个断点,或程序结束。不是“继续一行”,而是“继续到断点”
容易混淆的是:按一次F7不一定只进一层——如果当前行有多个函数调用(如 f(g(x))),F7会先进入最外层 f();想进 g(),得先F8跳过 f(),再在 g(x) 行按F7。
PyCharm 2026.2是 JetBrains PyCharm 的指定版本安装包,下载地址指向官方 Windows 安装包直链,可用于旧项目兼容、版本回退和环境测试。
为什么变量值没显示 / Watch窗口里加了表达式却报错
Debug过程中变量面板(Variables)默认只显示当前栈帧的局部变量和全局变量,不自动展开嵌套对象或属性。常见问题不是数据丢了,而是“没手动点开”:
- 字典、列表、自定义对象默认折叠,要点击右侧小箭头才能展开看内容
- 想实时观察某个表达式(如
len(my_list) > 5),不能直接写进Variables面板,得右键 →Add to Watches,或在Watches窗口底部点+号输入 - Watches里写的表达式必须能在当前作用域求值。比如在函数内调试时,写
os.getcwd()没问题,但写nonexistent_var就会显示Unresolved reference - 注意:Watches里的表达式支持简单运算和函数调用,但不支持赋值语句(
x = 1会报语法错误)
调试Flask/Django等Web服务时怎么不卡住浏览器
Web框架默认启用多线程或多进程(如Flask的 debug=True 自带重载+多线程),会导致断点一停,整个服务无响应,刷新页面就超时。这不是PyCharm的问题,而是调试器和框架线程模型冲突:
- Flask:启动Debug前,在代码里显式关闭重载和多线程:
app.run(debug=True, use_reloader=False, threaded=False) - Django:运行配置里勾选
Run with Python Console无效;正确做法是在Run Configuration → Environment variables 中添加DEBUG=True,并在manage.py runserver后加参数--nothreading --noreload - 更稳妥的方式:用PyCharm内置的Python Console启动服务,而不是直接Debug脚本——右键
manage.py→Debug,然后在Console里手动输runserver --nothreading --noreload
断点设在视图函数里才有效;路由分发、中间件、模板渲染这些环节,得在对应源码位置设断点,光在views.py里断不够。

















