断点
断点是在特定位置暂停程序执行的特殊标记。 这使您能够检查程序的状态和行为。 断点可以很简单,例如在到达某一行代码时暂停;也可以包含更复杂的逻辑,例如根据 附加条件 进行检查、 写入日志 等等)。

设置后,除 临时断点 外,断点会一直保留在项目中,直到您显式将其移除。
断点类型
在 PyCharm 中提供以下类型的断点:
行断点 :在到达设置了断点的代码行时暂停程序。 此类断点可设置在任何可执行的代码行上。
异常断点 :在抛出
Exception或其子类时暂停程序。 在 PyCharm 中,您可以为 Python 异常设置断点。 在 PyCharm Pro 中,提供 Django、Jinja2、JavaScript 和 Jupyter 异常断点。 它们全局应用于异常条件,不需要特定的源代码引用。 与堆栈跟踪不同,在异常处暂停应用程序可让您在相关上下文或数据仍然可用时进行检查。
设置断点
设置行断点
在要设置断点的可执行代码行的标记栏中点击。 或者,将插入符号置于该行并按 Ctrl+F8。

设置异常断点
按 Ctrl+Shift+F8 ,或在主菜单中选择 。
在 断点 对话框中,按 Alt+Insert 或点击
,然后选择 Python 异常断点 或 JavaScript 异常断点。

管理断点
移除断点
对于非异常断点:在标记栏中点击该断点。
对于所有断点:在主菜单中转到 Ctrl+Shift+F8 ,选择该断点,然后点击
移除 或按 Delete。

为避免误删断点并丢失其参数,您可以选择仅通过将断点拖到编辑器中或点击鼠标中键来移除断点。 为此,请转到 并选择 拖到编辑器或使用鼠标中键点击。 此后,点击断点将会 启用或禁用它。
静默断点
如果您暂时不需要在断点处停止,您可以 静默它们。 这样,您无需退出调试会话即可恢复程序的正常运行。 之后,您可以取消静默断点并继续调试。
在 调试 工具窗口的工具栏中,点击 静音断点 按钮
。

启用/禁用断点
当您移除断点时,其 内部配置会丢失。 若要在不丢失参数的情况下暂时关闭单个断点,您可以将其 禁用:
对于非异常断点:右键点击它,并根据需要设置 启用 选项。 或者,按住 Alt 并点击断点,或点击鼠标中键即可完成此操作。 对于鼠标中键,请确保未将移除断点操作 分配给它。

对于所有断点:点击 运行 | 查看断点 Ctrl+Shift+F8 ,并在列表中选中/取消选中该断点。
移动/复制断点
要移动断点,请将其拖到另一行。
要复制断点,请按住 Ctrl 并将断点拖到另一行。 这会在目标位置创建一个具有相同参数的断点。
查看所有已设置的断点
您可以在 书签 工具窗口中查看所有断点的列表。 一旦您在代码中放置断点,它们会自动添加到该工具窗口中的专用列表。
在主菜单中,转到 ,或按 Alt+2 ,并展开 断点 列表。

对断点分组
您可以将断点分组,例如需要标注用于特定问题的断点时。
在 断点 对话框 Ctrl+Shift+F8 中,选择要放入某个组的断点,并在菜单中选择 。

配置断点属性
根据断点类型,您可以配置其他属性,以便针对特定需求定制其行为。 最常用的选项可通过 意图操作使用。
要访问断点意图操作,请将插入符号置于带有断点的行并按 Alt+Enter。 当您需要快速配置基本断点属性时,请使用此选项。

要访问完整的属性列表,请右键点击断点,然后点击 更多 ,或按 Ctrl+Shift+F8。
意图操作参考
断点属性参考
选项 | 描述 | 断点类型 |
|---|---|---|
启用 | 清除复选框以暂时禁用断点,而不将其从项目中移除。 在调试过程中将跳过已禁用的断点。 | 所有类型 |
暂停 | 选中复选框以在命中断点时暂停程序执行。 如果您需要在某个位置获取日志信息或计算表达式,而不打断程序,暂停应用程序会很有用。 如果您需要创建一个 主 断点,在命中时触发依赖断点,请选择在该断点处不暂停程序。 选择暂停策略:
| 所有类型 |
条件 | 选择此项以指定命中断点的条件。 条件是一个 Python 布尔表达式。 该表达式必须在设置断点的代码行有效,并且每次命中断点时都会进行求值。 如果求值结果为 | Python 行断点和异常断点 |
日志 | 如果您希望将以下事件记录到控制台,请选择此项:
| Python 行断点和异常断点 |
计算并记录 | 选择此项以在命中断点时计算一个表达式,并在控制台输出中显示结果。 | Python 行断点和异常断点 |
命中后移除 | 选择此项以在命中后立即将该断点从项目中移除。 | Django 异常、Jinja2 异常和 JavaScript 异常断点 |
在命中断点前禁用 | 选择将触发当前断点的断点。 在命中该断点之前,当前断点将处于禁用状态。 您还可以选择在其被命中后再次将其禁用,或保持启用状态。 | 所有类型 |
仅未捕获 | 选择此项以在命中未捕获异常上的断点时收到通知。 | JavaScript 异常断点 |
激活策略 | ||
终止时 | 选择此项以在进程因抛出该异常而终止时停止调试器。 | Python 异常断点 |
抛出时 | 选择此项以在抛出该异常时停止调试器。 此情况下,进程不会终止。 | Python 异常断点 |
忽略库文件 | 如果您不希望在库中抛出该异常时调试器停止,请选择此项。 | Python 异常断点 |
断点状态
断点可以具有以下状态:
状态 | 描述 |
|---|---|
已验证 | 启动调试器会话后,调试器会检查是否在技术上可以在该断点处暂停程序。 如果可以,调试器会将该断点标记为 已验证。 |
警告 | 如果在技术上可以在该断点处暂停程序,但存在相关问题,调试器会将断点状态设置为 警告。 例如,当无法在某个方法的某个实现处暂停程序时,可能会发生这种情况。 |
无效 | 如果在技术上无法在该断点处暂停程序,调试器会将其标记为 无效。 这通常是因为该行没有可执行代码。 |
非活动/依赖 | 当断点 配置为在命中另一个断点之前处于禁用状态 ,且尚未命中该断点时,会被标记为非活动/依赖。 |
已静默 | 所有断点均暂时处于非活动状态,因为它们已被 静默。 |
已禁用 | 此断点暂时处于非活动状态,因为它已被 禁用。 |
不暂停 | 此断点的 暂停策略设置为在命中时不暂停执行。 |
断点图标
行 | 异常 | |||
|---|---|---|---|---|
常规 | ||||
已禁用 | ||||
已验证 | ||||
已静默 | ||||
非活动/依赖 | ||||
已静默的已禁用 | ||||
不暂停 | ||||
已验证的不暂停 | ||||
无效 | ||||
效率提示
- 使用断点进行调试打印
请使用 不暂停 日志断点(在其他调试器中有时称为 watchpoint),而不要在代码中插入 print 语句。 这提供了一种更灵活、集中地处理调试日志消息的方式。
- 更快速地设置日志断点
要设置一个 不暂停 日志断点,请按住 Shift 并点击标记栏。 这不会暂停程序执行,而是记录类似
Breakpoint reached: threads.py:28的消息。 如果您想记录编辑器中眼前的某个表达式,请先选中它,然后按住 Shift 并点击标记栏。- 添加断点描述
如果项目中有很多断点,您可以为断点添加描述,以便于搜索。 为此,请在 断点 对话框 Ctrl+Shift+F8 中右键点击某个断点,并在菜单中选择 编辑描述。 现在,当您开始输入断点名称时,它会获得焦点。
- 跳转到源代码
要从 断点 对话框跳转到设置所选断点的代码行,请按 F4。