断点
断点是在特定点暂停程序执行的特殊标记。这使您可以检查程序状态和行为。断点可以很简单(例如,在到达某行代码时暂停程序)或涉及更复杂的逻辑(检查附加条件、写入日志消息等)。
一旦设置,断点将保留在您的项目中,直到您明确删除它,临时断点除外)。
断点的类型
PhpStorm 中提供以下类型的断点:
行断点:在到达设置断点的代码行时暂停程序。这种类型的断点可以设置在任何可执行的代码行上。
方法断点:在进入或退出指定方法或其实现之一时暂停程序,允许您检查方法的进入/退出条件。
异常断点
Exception
:在抛出程序或其子类时暂停程序 。它们全局应用于异常条件,不需要特定的源代码引用。
设置断点
设置行断点
单击要设置断点的可执行代码行的间距。或者,将插入符号放在该行并按Ctrl+F8。
设置方法断点
单击声明方法的行处的装订线。或者,将插入符号放在该行并按Ctrl+F8。
或者,执行以下操作:
按Ctrl+Shift+F8或选择
从主菜单在打开的Breakpoints对话框中,按下Alt+Insert或单击,然后选择PHP Method Breakpoints。
在Add Method Breakpoint对话框中,指定要为其添加断点的类和方法或普通函数。
设置异常断点
单击Debug工具窗口左侧的View Breakpoints 或按。Ctrl+Shift+F8
在Breakpoints对话框中,按Alt+Insert或单击,然后选择PHP Exception Breakpoints或JavaScript Exception Breakpoint。
在“添加异常断点”对话框中,从库或项目中指定异常类。
有关详细信息,请参阅使用 PHP 异常断点进行调试。
已解决的断点
当使用 Xdebug 时,PhpStorm 可以使用它的断点解析机制。在这种机制下,调试器评估 PHP 是否可以为当前行生成内部可执行字节码。如果没有为一行生成这样的代码,则无法命中相应的断点。Xdebug 将扫描最多 5 个后续行,并在可执行代码所在的行停止。Xdebug 2.8 及更高版本支持解析断点。
在下面的示例中,第 4 行不能找到任何可执行代码。断点被解析到第 5 行,调试会话相应暂停。
解决断点后,PhpStorm 会显示相应的通知。
设置/首选项对话框的 页面( Ctrl+Alt+S):
上的 PhpStorm 中配置断点解析支持。在Xdebug区域中,使用Resolve breakpoint if it is not available on the current line (Xdebug 2.8+)复选框来切换断点解析。请注意,如果禁用解析,则在没有可执行代码的代码行上设置的断点将始终被忽略。
在Advanced settings区域中,使用Notify if breakpoint was resolved to a different line (Xdebug 2.8+)复选框来选择 PhpStorm 是否应该在断点被解析时显示通知消息。
管理断点
删除断点
对于非异常断点:单击装订线中的断点。
对于所有断点:从主菜单中,选择Remove Delete。
Ctrl+Shift+F8,选择断点,然后单击
为避免意外删除断点并丢失其参数,您可以选择通过将断点拖动到编辑器或单击鼠标中键来删除断点。为此,请转到拖动到编辑器或用鼠标中键单击。单击断点将启用或禁用它。
并选择静音断点
如果您不需要在断点处停止一段时间,您可以将它们静音。这允许您在不离开调试器会话的情况下恢复正常的程序操作。之后,您可以取消静音断点并继续调试。
单击调试工具窗口工具栏中的静音断点按钮。
启用/禁用断点
删除断点时,其内部配置将丢失。要暂时关闭单个断点而不丢失其参数,您可以禁用它:
对于非异常断点:右键单击它并根据需要设置启用选项。如果没有分配删除断点,您也可以使用鼠标中键切换它们。
对于所有断点:单击查看断点 Ctrl+Shift+F8并选中/取消选中列表中的断点。
移动/复制断点
要移动断点,请将其拖到另一行。
要复制断点,请按住断点Ctrl并将其拖动到另一行。这会在目的地创建一个具有相同参数的断点。
配置断点的属性
根据断点类型,您可以配置其他属性,以便根据特定需求定制其操作。最常用的选项可通过intents获得。
要访问断点意图,请将插入符号放在断点所在的行并按Alt+Enter。当您需要快速配置基本断点属性时使用此选项。
要访问完整的属性列表,请右键单击断点并单击更多或按Ctrl+Shift+F8。使用此选项可以鸟瞰所有断点并完全控制其配置。
意向参考
断点的属性
启用
清除复选框以暂时禁用断点而不将其从项目中删除。在单步执行期间会跳过禁用的断点。
您可以将 PhpStorm 配置为在单击时启用/禁用断点,而不是完全删除它们。为此,请转到Remove breakpoint选项设置为Drag to the editor 或单击鼠标中键。
并将暂停
指定当断点被命中时是否暂停程序执行。
当您需要在不暂停程序的情况下记录某些表达式时(例如,当您需要知道一个方法被调用了多少次时)或者您需要创建一个主断点以在命中时启用相关断点时,非挂起断点很有用.
健康)状况
此选项用于指定每次命中断点时检查的条件。条件是一个 PHP 布尔表达式,例如计算为true
or 。如果条件评估为,则执行选定的操作。否则,断点将被忽略。false
$someID == 'foo'
true
表达式的结果取自 return 语句。当没有 return 语句时,结果取自代码的最后一行。
在评估表达式时,请确保您了解它们可能产生的副作用,因为它们可能会影响程序的行为和/或结果。
日志记录选项
命中断点时,可以将以下内容记录到控制台:
“断点命中”消息:类似的日志消息
Breakpoint reached: LineBreakpoint.php:10
堆栈跟踪:当前帧的堆栈跟踪。如果您想在不中断程序执行的情况下检查导致该点的路径,这将很有用。
评估和记录:任意表达式的结果,例如,
'Initializing'
或users->size ()
。表达式的结果取自 return 语句。当没有 return 语句时,结果取自代码的最后一行,甚至不必是表达式:文字也可以。这可用于生成自定义消息或在程序执行时跟踪某些值。
在评估表达式时,请确保您了解它们可能产生的副作用,因为它们可能会影响程序的行为和/或结果。
击中后移除
指定断点被击中一次后是否应从项目中删除。
禁用直到遇到以下断点
当在Disable until hit the following breakpoint框中选择断点时,它将作为当前断点的触发器。这将禁用当前断点,直到指定的断点被命中。
您还可以选择是在发生这种情况后再次禁用它还是保持启用状态。
当您只需要在某些条件下或某些操作后暂停程序时,此选项很有用。在这种情况下,触发断点通常不需要停止程序执行,而是设置为non-suspending。
断点状态
断点可以具有以下状态:
状态 | 描述 |
---|---|
已验证 | 启动调试器会话后,调试器会检查在技术上是否可以在断点处暂停程序。如果是,调试器将断点标记为已验证。 |
警告 | 如果在断点处暂停程序在技术上是可行的,但是存在与之相关的问题,则调试器会向您发出警告。例如,当无法在方法的实现之一处暂停程序时,可能会发生这种情况。 |
无效的 | 如果在断点处暂停程序在技术上是不可能的,调试器会将其标记为无效。最常见的原因是该行没有可执行代码。 |
不活跃/依赖 | 当断点被配置为禁用时,它被标记为非活动/依赖,直到另一个断点被命中,这还没有发生。 |
静音 | 所有断点都暂时处于非活动状态,因为它们已被静音。 |
已禁用 | 此断点暂时处于非活动状态,因为它已被禁用。 |
非暂停 | 为此断点设置了暂停策略,以便在命中时不会暂停执行。 |
断点图标
线 | 方法 | 例外 | ||
---|---|---|---|---|
常规的 | ||||
已禁用 | ||||
已验证 | ||||
静音 | ||||
不活跃/依赖 | ||||
静音已禁用 | ||||
非暂停 | ||||
已验证非暂停 | ||||
无效的 |
生产力提示
- 使用断点进行调试打印
使用非暂停 日志断点(有时在其他调试器中称为观察点),而不是在代码中插入打印语句。这提供了一种更灵活、更集中的方式来处理调试日志消息。
- 更快地设置日志记录断点
要设置非暂停 日志记录断点,请按住Shift并单击排水沟。这不会暂停程序执行,而是记录一条消息,如
Breakpoint reached: LineBreakpoint.php:10
. 如果您想在编辑器中记录您面前的某些表达式,请在按住Shift并单击装订线之前选择它。- 添加断点描述
如果您的项目中有许多断点,您可以在断点中添加描述以便于搜索。为此,请右键单击断点对话框中的断点,然后从菜单中Ctrl+Shift+F8选择编辑描述。现在,当您开始键入断点名称时,它会获得焦点。
- 组断点
您可以将断点组织成组,例如,如果您需要为特定问题标记断点。为此,在Breakpoints对话框Ctrl+Shift+F8中,选择要放置在组中的断点,然后从菜单中选择
- 跳转到源
要从Breakpoints对话框跳转到设置所选断点的代码行,请按F4。