在 PyCharm 里调试程序

前一节已经讲了调试程序的准备工作,在设置断点后,然后从选定的运行/调试配置开始,就可以启动一个调试会话了。本节主要内容是讲解如何逐步完成程序调试,如何监控调试信息及停止与暂停等相关功能。

1. 调试程序

  1. 在编辑器中打开所需的 Python 脚本,或在"Project"工具窗口中选择文件。

  2. 从上下文菜单中选择 “debug 脚本名”。Python 脚本的调试会话将从默认的临时运行/调试配置开始,如果你已经配置永久的运行/调试配置为当前脚本,此时菜单显示 “debug 配置名”。
    图片描述
    Tips: 在前面章节已经讲了如何添加运行/调试配置,在调试脚本前,可以增加新的配置。除此以外,在前面章节运行程序的方法入口也同样适用于调试程序,在菜单中都会找到对应的调试选项。

  3. 调试会话启动后,程序会在击中的第一个断点处挂起,PyCharm会自动打开Debug 工具窗口。会包括Debugger 与 Console 选项卡。
    图片描述

  4. 在调试过程中, 可以通过工具栏按钮暂停与恢复调试。对应的菜单 暂停: Run -> Debugging Actions -> Pause Program 恢复 Run -![>](//img.mukewang.com/wiki/5f1d2d4009ffeec115260808.jpg) Debugging Actions -> Resume Program
    图片描述
    Tips: 如果对断点执行的静音操作(mute breakpoints), 所有断点图标将变为灰色,如下图所示。在此种状态调试程序,相当于没有断点直接运行了程序。如果要恢复断点,再点击一下静音断点的按钮即可。
    图片描述

  5. 当执行到达断点或手动挂起程序时,可以通过分析栈帧来检查应用程序。所有当前活动的帧都显示在Debugger 工具窗口的"Frames"窗格中。这种场景多用于多线程的情况。(栈帧就是一个函数执行的环境。实际上可以简单理解为:栈帧就是存储在用户栈上的每一次函数调用涉及的相关信息的记录单元。)
    图片描述

2. 分步调试程序

PyCharm 提供了一组步进操作,可以分步调试程序,步进按钮位于调试工具窗口工具栏上。
图片描述
下面从左到右分别介绍这些按钮的作用:

  1. step over (F8): 单步执行,执行当前代码行,并带你到下一行,即使行中包含方法调用,将跳过方法的实现,不进入方法内部,直接移动到调用方方法的下一行。
  2. step into (F7): 单步执行,与step over 不同,如果包含方法调用可跳到当前执行点调用的方法内部当中去。
    下面分别演示了step over 与 step into
    图片描述
  3. step into my code (⌥⇧F7: Alt + Shift + F7) 调试时,你可能只专注于自己的代码,对于系统模块的方法并不打算进入,此时可点击这个代替step into。看下面的例子logger.xxx都是系统模块logger的方法,而Solver()是自定义类,当点击step into my code 时只会进入自定义类的方法中。
    图片描述
  4. force step into: 强制调试器跳到当前执行点中调用的方法。对于调试python 程序,大多数情况下这个按钮是不可用状态,不是很常用。
  5. step out (⇧F8): 单击此按钮可使调试器退出当前方法,并执行其后执行的行返回到上一层。 下面的例子先进入方法内部,然后step out 回到主程序,再点击step out, 直接跳到下一个断点。
    图片描述
  6. Run to Cursor(⌥ F9: Alt + F9) 继续执行,直到达到光标所在行的位置停止。在调试过程中,你点击代码中任意一行,然后点击这个按钮,调试器就会直接跳到这行,相当给这行加了一个临时断点。
    图片描述

3. 小结

本节具体介绍如何调试代码,查看调试信息,对于步进工具按钮在讲解过程中为了便于理解,都是直接点击工具栏按钮,但在实际工作中,还是建议使用快捷键,这将有助于提高调试程序的效率。涉及的有些快捷键可能会与自身操作系统快捷键冲突,请打开 PyCharm/File -> Preference/Settings 增加自定义快捷键。
图片描述
图片描述