位置:首页 > Python > PyCharm调试教程:单步执行代码快速入门

PyCharm调试教程:单步执行代码快速入门

时间:2026-08-14  |  作者:实验室老王  |  阅读:0

在 PyCharm 里打断点很直接:点击行号左侧的灰色区域,出现红点就表示断点已设好。不过要注意,断点只会对可执行语句生效。

真正开始调试时,得右键选择“Debug 'xxx.py'”,或者直接按 Shift+F9(Win/Linux)/D(macOS)。如果点的是运行按钮,那走的就不是调试流程。

进入调试状态后,通常用 F7(步入)、F8(步过)、F9(继续到断点)来控制程序的执行节奏。

PyCharm快速入门:怎么调试(Debug)单步执行代码

怎么在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。

为什么变量值没显示 / 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.pyDebug,然后在Console里手动输 runserver --nothreading --noreload

断点设在视图函数里才有效;路由分发、中间件、模板渲染这些环节,得在对应源码位置设断点,光在views.py里断不够。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多