在检查点检查对象
学习目标
完成本单元后,您将能够:
- 在 Apex 代码中设置检查点。
- 使用检查点检查器分析内存中的对象。
在 Apex 代码中设置检查点
当飞船开始探测系统错误时,必须直接查看日志,以找出错误和出错的位置。
同样,当 Apex 代码导致错误,出现性能问题或无法产生预期结果时,第一步就是要使用调试日志找出问题所在。逐行梳理整个日志是一项枯燥乏味的任务。这时就是检查点可以派上用场的时候!检查点可以显示执行期间的特定时间 Apex 代码执行情况的快照。
您最多可以在 Apex 代码中设置五个检查点。检查点不可用于 Visualforce 标记。
让我们在之前创建的
EmailMissionSpecialist
类中设置一个检查点。- 选择文件 | 打开,之后打开
EmailMissionSpecialist
类。 - 选择调试 | 更改日志级别。
- 在“您的一般跟踪设置”部分,单击添加/更改。
- 将
ApexCode
日志级别设置为 FINEST。
注意:要设置检查点,需要具备“查看所有数据”的用户权限。要使用检查点生成结果,使用执行匿名运行代码,或自行设置一个 DEVELOPER_LOG 跟踪标记。跟踪标记必须包含 INFO 的 Apex 日志级别或更高级别。 - 要保存更改,单击完成。
- 要退出“更改日志级别”对话框,单击完成。
源代码编辑器中显示代码时,可以在左侧看到行号。单击 inspectResults(results);
的行号。红点 (1) 出现,即表示检查点已创建成功。
现在您可以执行代码并使用“检查点”选项卡对其进行分析。
检查点选项卡
您可以使用“检查点”选项卡准确查看代码执行出错的位置,以及此时对象的值。我们来运行此代码,以便查看实际应用中的检查点。
选择调试 | 打开执行匿名窗口。输入以下代码并执行。请务必将“输入您的电子邮件地址”替换为自己的电子邮件地址。
EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('Enter your email address', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
成功运行 Apex 代码后,打开调试日志并单击检查点选项卡,以查看结果。
- “检查点”表可以显示每个检查点的命名空间、类和行号。它还可以显示每个检查点的创建日期和时间。
- “检查点位置”表可以显示所选检查点捕获的文件名、行号和迭代。
双击“检查点”表中的一个检查点,以便在检查点检查器中查看捕获的结果。现在就好玩了!
检查点检查器
检查点检查器有两个选项卡:“堆”和“符号”。
- 堆 - 显示内存中执行检查点的代码行处的所有对象。
- 符号 - 以树视图显示内存中的所有符号。
堆选项卡
“堆”选项卡包括一些很棒的调试面板,例如“类型”面板。此面板可以显示实现实例化的对象数量以及它们消耗的内存字节数。我们来看看您设置的检查点捕获的详细信息。
- 在“类型”下,单击
Messaging.SingleEmailMessage
。 - 在“实例”下,单击此对象类型的任何实例。
- 在“状态”下,查看对象的字段以及字段的值。
符号选项卡
“符号”选项卡是一种查看任何检查点各种对象状态的快速且简单的方法。符号是引用特定对象的唯一名称。该选项卡能够以树视图显示内存中的所有符号。
作为“指挥官”,您不仅需要检查系统运行是否平稳,还需要对错误进行追踪。让我们看看检查点检查器如何帮助您更好地理解您的代码。
- 要从选项卡中清除检查点结果,选择调试 | 清除 | 检查点结果面板。
- 选择调试 | 打开执行匿名窗口。
- 再次运行
EmailMissionSpecialist
类,这次使用一个无效的电子邮件地址,例如 testingemail。EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- 运行代码后,单击检查点选项卡。
“检查点”选项卡不会显示任何结果,因为您的代码没有执行到设置检查点的行号。
我们早一点在代码中添加一个检查点,这样我们就可以在我们的代码遇到 testingemailerror 之前在新的检查点捕获信息。
- 选择文件 | 打开,之后打开
EmailMissionSpecialist
类。 - 单击左侧的行号,打开
String[] toAddresses = new String[] {address}
。 - 选择调试 | 清除 | 检查点结果面板。
- 选择调试 | 打开执行匿名窗口。
- 使用一个无效的电子邮件地址再次运行
EmailMissionSpecialist
,例如 testingemail。EmailMissionSpecialist em = new EmailMissionSpecialist(); em.sendMail('testingemail', 'Flight Path Change', 'Mission Control 123: Your flight path has been changed to avoid collision ' + 'with asteroid 2014 QO441.');
- 单击检查点选项卡。
您会在“检查点”选项卡中看到一个新的条目。现在,您可以使用检查点检查器对内存中的对象进行分析。