【PyCharm教程】PyCharm 断点

断点是在特定点暂停程序执行的特殊标记。这使您可以检查程序状态和行为。断点可以很简单(例如,在到达某行代码时暂停程序)或涉及更复杂的逻辑(检查附加条件、写入日志消息等)。
一旦设置,断点将保留在您的项目中,直到您明确删除它,临时断点除外)。
如果带有断点的文件被外部修改,例如,通过 VCS 更新或在外部编辑器中更改,并且行号已更改,则断点将相应移动。请注意,进行此类更改时必须运行 PyCharm,否则它们将被忽略。
断点的类型
PyCharm 中提供了以下类型的断点:
- 行断点:在到达设置断点的代码行时暂停程序。这种类型的断点可以设置在任何可执行的代码行上。
- 异常断点
Exception
:在抛出程序或其子类时暂停程序 。在 PyCharm 中,您可以为 Python 异常设置断点。对于 PyCharm Professional、Django、Jinja2、JavaScript 和 Jupyter 异常断点可用。它们全局应用于异常条件,不需要特定的源代码引用。
设置断点
设置行断点
- 单击要设置断点的可执行代码行的间距。或者,将插入符号放在该行并按Ctrl+F8。
设置异常断点
- 单击Debug工具窗口左侧的View Breakpoints 或按。
Ctrl+Shift+F8
- 在Breakpoints对话框中,按Alt+Insert或单击
,然后选择 Python Exception Breakpoint或JavaScript Exception Breakpoint。
管理断点
删除断点
- 对于非异常断点:单击装订线中的断点。
- 对于所有断点:从主菜单中,选择Run | 查看 Breakpoints Ctrl+Shift+F8,选择断点,然后单击Remove Delete。
为避免意外删除断点并丢失其参数,您可以选择通过将断点拖动到编辑器或单击鼠标中键来删除断点。为此,请转到设置/首选项 | 构建、执行、部署 | 调试器并选择拖动到编辑器或用鼠标中键单击。单击断点将启用或禁用它。
静音断点
如果您不需要在断点处停止一段时间,您可以将它们静音。这允许您在不离开调试器会话的情况下恢复正常的程序操作。之后,您可以取消静音断点并继续调试。
- 单击调试工具窗口工具栏中的静音断点按钮。
启用/禁用断点
删除断点时,其内部配置将丢失。要暂时关闭单个断点而不丢失其参数,您可以禁用它:
- 对于非异常断点:右键单击它并根据需要设置启用选项。如果没有分配删除断点,您也可以使用鼠标中键切换它们。
- 对于所有断点:单击查看断点 Ctrl+Shift+F8并选中/取消选中列表中的断点。
移动/复制断点
- 要移动断点,请将其拖到另一行。
- 要复制断点,请按住断点Ctrl并将其拖动到另一行。这会在目的地创建一个具有相同参数的断点。
配置断点的属性
根据断点类型,您可以配置其他属性,以便根据特定需求定制其操作。最常用的选项可通过intents获得。
- 要访问断点意图,请将插入符号放在断点所在的行并按Alt+Enter。当您需要快速配置基本断点属性时使用此选项。
- 要访问完整的属性列表,请右键单击断点并单击更多或按Ctrl+Shift+F8。使用此选项可以鸟瞰所有断点并完全控制其配置。
意向参考
意图 | 描述 |
---|---|
删除断点 | 删除选定行处的断点。 |
禁用断点 | 在选定行禁用断点。 |
编辑断点 | 打开一个包含最常用断点属性的对话框。如需更多属性,请单击更多或按Ctrl+Shift+F8。 |
断点的属性
选项 | 描述 | 断点类型 |
---|---|---|
启用 | 清除复选框以暂时禁用断点而不将其从项目中删除。在调试过程中将跳过禁用的断点。 | 所有类型 |
暂停 | 选中该复选框以在遇到断点时暂停程序执行。如果您需要在不中断程序的情况下获取日志信息或计算某个点的表达式,则暂停应用程序很有用。如果您需要创建一个主断点,在命中时将触发相关断点,请选择不在该断点处暂停程序。选择暂停策略:All : 所有线程都将被挂起线程:只有包含这个断点的才会被挂起。如果您希望将Thread策略用作默认策略,请单击Make default按钮。如果程序的策略设置为All ,程序将不会在断点处暂停,并且在命中该断点时会执行一些单步操作。 | 所有类型 |
健康)状况 | 选择以指定命中断点的条件。条件是 Python 布尔表达式。此表达式必须在设置断点的行处有效,并且每次命中断点时都会对其进行评估。如果评估结果为 True ,则执行选定的操作。您可以输入多行表达式,例如:if attempted_password == os.environ['USER_PASSWORD']: session['logged_in'] = True else: session['logged_in'] = False error = 'Invalid credentials. Please, try again.' return session['logged_in'] | Python 行和异常断点 |
日志 | 选择是否要将以下事件记录到控制台:“Breakpoint hit” message:当断点被命中时,控制台输出中会显示一条日志消息。堆栈跟踪:当断点被命中时,它的堆栈跟踪将被打印到控制台。如果您想在不中断程序执行的情况下检查导致该点的路径,这将很有用。 | Python 行和异常断点 |
评估和记录 | 选择在断点被命中时计算表达式,并在控制台输出中显示结果。 | Python 行和异常断点 |
击中后移除 | 选择在项目被击中后立即从项目中删除断点。 | Django 异常、Jinja2 异常和 JavaScript 异常断点 |
禁用直到断点被命中 | 选择将触发当前断点的断点。在命中该断点之前,当前断点将被禁用。您还可以选择是否希望再次禁用它或在它被击中后保持启用状态。 | 所有类型 |
仅未捕获 | 选择在遇到未捕获异常的断点时收到通知。 | JavaScript 异常断点 |
激活策略 | ||
终止时 | 选择以在进程因抛出此异常而终止时停止调试器。 | Python 异常断点 |
加薪 | 选择在抛出此异常时停止调试器。在这种情况下,进程不会终止。 | Python 异常断点 |
忽略库文件 | 如果在库中引发此异常,则选择是否不希望调试器停止。 | Python 异常断点 |
断点状态
断点可以具有以下状态:
地位 | 描述 |
---|---|
已验证 | 启动调试器会话后,调试器会检查在技术上是否可以在断点处暂停程序。如果是,调试器将断点标记为已验证。 |
警告 | 如果在断点处暂停程序在技术上是可行的,但是存在与之相关的问题,则调试器会向您发出警告。例如,当无法在方法的实现之一处暂停程序时,可能会发生这种情况。 |
无效的 | 如果在断点处暂停程序在技术上是不可能的,调试器会将其标记为无效。最常见的原因是该行没有可执行代码。 |
不活跃/依赖 | 当断点被配置为禁用时,它被标记为非活动/依赖,直到另一个断点被命中,这还没有发生。 |
静音 | 所有断点都暂时处于非活动状态,因为它们已被静音。 |
已禁用 | 此断点暂时处于非活动状态,因为它已被禁用。 |
非暂停 | 为此断点设置了暂停策略,以便在命中时不会暂停执行。 |
断点图标
根据它们的类型和状态,断点标有以下图标:
线 | 方法 | 例外 | |
---|---|---|---|
常规的 | |||
已禁用 | |||
已验证 | |||
静音 | |||
不活跃/依赖 | |||
静音已禁用 | |||
非暂停 | |||
已验证非暂停 | |||
无效的 |
生产力提示
使用断点进行调试打印
使用非暂停 日志断点(有时在其他调试器中称为观察点),而不是在代码中插入打印语句。这提供了一种更灵活、更集中的方式来处理调试日志消息。
更快地设置日志记录断点
要设置非暂停日志记录断点,请按住Shift并单击排水沟。这不会暂停程序执行,而是记录一条消息,如 Breakpoint reached: threads.py:28
. 如果您想在编辑器中记录您面前的某些表达式,请在按住Shift并单击装订线之前选择它。
添加断点描述
如果您的项目中有许多断点,您可以在断点中添加描述以便于搜索。为此,请右键单击断点对话框中的断点,然后从菜单中Ctrl+Shift+F8选择编辑描述。现在,当您开始键入断点名称时,它会获得焦点。
组断点
您可以将断点组织成组,例如,如果您需要为特定问题标记断点。为此,在Breakpoints对话框Ctrl+Shift+F8中,选择要放置在组中的断点,然后从菜单中选择Move to group 。
跳转到源
要从Breakpoints对话框跳转到设置所选断点的代码行,请按F4。