查看: 387|回复: 3

Pycharm Debug调试指南:断点设置、单步执行与变量查看

[复制链接]
发表于 昨天 12:00 | 显示全部楼层 |阅读模式
在Python开发中,Debug调试是定位问题的核心技能。本文以PyCharm为IDE,从零开始演示如何利用断点、单步执行、变量监视和控制台交互来提高调试效率,同时针对常见Debug启动失败问题给出修复方案。

一、设置断点
在代码行左侧的灰色边栏上单击,即可在该行添加一个断点,该行背景变为红色。当PyCharm运行到这一行时,程序会暂时挂起,便于开发者检查当前状态。若要取消断点,在同一位置再次单击即可。将鼠标悬停在断点上会显示行号和脚本属性;右击断点可以修改属性(如条件、日志断点等),修改后断点图标会发生变化。

二、启动Debug
常用两种方式进入调试模式:
1. 在编辑区右键点击代码,选择“Debug ‘脚本名称’”;
2. 点击工具栏上的小虫子图标(Debug按钮)。

启动后PyCharm会执行以下操作:
- 程序开始运行,并在第一个断点处暂停;
- 断点所在行变为蓝色,表示执行已到达该行但尚未执行该行代码;
- 底部出现Debug tool window(调试工具窗口),展示当前调试信息。

三、Debug窗口核心按钮解析
调试工具窗口有一排图标,各自对应快捷键和功能:
1. Show Execution Point (F10):显示当前所有断点位置。
2. Step Over (F8):单步执行。若当前行包含函数调用,不会进入函数内部,而是将整个函数作为一步完成。
3. Step Into (F7):单步执行。若当前行包含函数调用,会进入该函数内部,逐行执行子函数。
4. Step Into My Code (Alt+Shift+F7):执行下一行,但会跳过导入的库(比如标准库、第三方库),只进入自己写的代码。
5. Force Step Into (Alt+Shift+F7):强制进入下一行,忽略库和构造函数等。
6. Step Out (Shift+F8):当已进入一个子函数时,执行此操作会跳出当前子函数,返回上层函数的下一行。
7. Run to Cursor (Alt+F9):直接跳转到光标所在的行(若该行有断点则直接停在该断点)。

四、变量查看器(Watches)
在调试过程中,可以添加变量监视以实时观察其变化:
- 点击Watches窗口中的加号(+),输入变量名(如delay),按回车添加。
- 可以添加多个变量,初始状态下变量可能显示“未定义”(undefined),通过“Step Over”或“Step Into”执行赋值语句后,变量值便会更新。
- 注意:Watches窗口的图标是一个眼镜形状(在新版PyCharm中可能位置变化,可通过点击左下角的“Watch”标签找到)。也可以将Watches窗口与Variables窗口合并显示,方便对照。

五、控制台(Console)窗口的使用
Console窗口用于查看程序输出、错误信息以及执行临时Python命令:
- 默认在Debug模式启动时,Console窗口会显示程序的标准输出和错误。
- 若要直接在调试过程中执行Python命令,需要打开Python命令行提示符。在PyCharm新版中,该按钮隐藏在Console窗口左侧工具栏中(一个类似于命令提示符的图标),点击后可输入并执行Python语句,例如测试变量或进行临时计算。

六、实际调试示例
以下代码创建了两个线程,分别每秒打印一次当前时间:
  1. import threading
  2. import time
  3. def get_thread_name():
  4.     t = threading.current_thread()
  5.     return t.name
  6. def print_time(delay):
  7.     thread_name = get_thread_name()
  8.     count = 0
  9.     while count < 8:
  10.         time.sleep(delay)
  11.         count += 1
  12.         print("%s:%s" % (thread_name, time.ctime(time.time())))
  13. t1 = threading.Thread(target=print_time, args=(1,))
  14. t2 = threading.Thread(target=print_time, args=(2,))
  15. t1.start()
  16. t2.start()
  17. t1.join()
  18. t2.join()
复制代码
在第一个断点处(例如thread_name = get_thread_name()行)程序暂停,蓝色高亮表示该行还未执行。执行Step Over后,变量thread_name的值会出现在Variables窗口和Watches中。继续单步执行,可以观察count和delay的变化,确认线程执行顺序。

七、Debug启动失败的常见问题及解决
有时程序本身无语法错误,但点击Debug后控制台无响应或直接退出。以下四种方法可尝试修复:
1. 关闭PyCharm,删除项目目录下的.idea文件夹(隐藏),然后重新打开项目。
2. 删除所有断点:点击Debug工具窗口中的双红点图标(清除所有断点)。
3. 执行File > Invalidate Caches / Restart…,选择“Invalidate and Restart”。此操作清除项目缓存并重启PyCharm。
4. 重建整个工程并重新配置。
通常方法二或三能解决问题,方法一和四风险较大,谨慎使用。

八、总结
熟练使用PyCharm Debug功能可以大幅提升Python代码调试效率。本文涵盖了从断点设置、单步执行、变量监视到控制台交互的完整流程,并给出了Debug异常的常见解决方案。实际开发中,建议将print调试与断点调试结合,灵活运用Step Into/Over等操作,快速定位问题。
回复

使用道具 举报

发表于 昨天 12:05 | 显示全部楼层

Re: Pycharm Debug调试指南:断点设置、单步执行与变量查看

谢谢楼主的详细教程!断点的条件设置和变量监视那一块平时用得不多,看完感觉很实用。特别是按条件停住和看函数内部变量,抓多线程逻辑应该方便很多。之前遇到过一次Debug启动后没反应,试了清除缓存重启就好了,原来还有删除断点这个更快的办法👍
回复 支持 反对

使用道具 举报

发表于 昨天 12:05 | 显示全部楼层

Re: Pycharm Debug调试指南:断点设置、单步执行与变量查看

感谢楼主分享这么详细的PyCharm Debug调试指南!断点设置和单步执行讲得很清楚,特别是Step Into My Code这个功能,之前一直没注意,能跳过第三方库直接进入自己写的代码,确实很实用。还有控制台直接执行Python命令的小技巧,调试时用来测试临时变量很方便。那个Debug启动失败的问题,我之前也遇到过,用清除所有断点的方法一下子就解决了。收藏了,以后调试多参考楼主的步骤。
回复 支持 反对

使用道具 举报

发表于 昨天 12:05 | 显示全部楼层

Re: Pycharm Debug调试指南:断点设置、单步执行与变量查看

非常感谢楼主这么详细的PyCharm Debug指南,尤其是断点条件设置和Watch窗口的使用,平时很容易忽略这些细节。示例代码里的多线程调试场景也很实用,我之前在调试类似代码时,经常因为线程切换而搞不清变量状态,现在按你讲的Step Into和Step Over配合Watches,终于能清晰观察每个线程的执行流程了。另外,你提到的Invalidate Caches修复方法确实管用,之前卡死好几次都是这么解决的。再次感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-17 04:07 , Processed in 0.026063 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部