在我们的日常开发中,调试 apex 的最常见做法是使用调试日志。然而,Salesforce 提供了对你调试代码很有用的一些其他方案。可以像 Java, Golang, PHP 那样通过断点调试自己的 code.
Apex Interactive Debugger
, 也叫 Apex Debugger
, 允许客户使用 VS Code 作为客户端,在沙盒和 scratch orgs 中实时调试他们的 Apex 代码。你可以用它来:
- 在 Apex 类和触发器中设置断点。
- 查看变量,包括 sObject 类型,集合和 Apex 系统类型。
- 完成标准的调试操作,包括进入,结束和退出,以及运行到断点。
- 查看调用堆栈,包括由 Apex DML 激活的触发器,方法到方法的调用和变量。
- 把你的日志结果输出到 Debug Console.
但是如果使用 Apex Interactive Debugger
的话,需要 Salesforce org 有 Apex Debugger Licenses
, 而这个 license 需要花钱购买,本次 Demo 是基于 developer org, 我会使用另外一个调试工具 Apex Replay Debugger
. 它是一种免费的调试工具,可以帮助开发人员重放和调试 Apex 代码中的错误。它允许开发人员在不影响生产环境的情况下,重放和调试生产环境中发生的错误。这使得开发人员可以更好地了解错误的原因并解决问题。它与 Interactive Debugger 的区别是,Replay Debugger 需要基于日志文件调试,不是实时的进行断点调试。
以上涉及到的工具,都包含在 VS Code 中的SF 扩展包里。
调试和测试代码
配置好 Apex Replay Debugger 扩展后,我们来做一些测试和调试,以修复一些 Apex 代码。
部署代码到 org
先利用 Salesforce CLI 工具,创建一个项目,并认证一个 org, 然后分别创建一个 class 和一个测试类用于调试测试。
在 Visual Studio Code 中,右击文件夹 classes,然后选择 SFDX: Deploy Source To Org.
运行 Apex Test Class
在 VS Code 中,使用快捷键 Ctrl+Shift+P
(Windows 或 Linux) 或 Cmd+Shift+P
(macOS) 来打开命令板。在搜索框中输入 apex test, 然后选择 SFDX: Run Apex Tests.
选择 AccountServiceTest.cls
注意输出面板中的测试结果.Apex 测试失败了!
错误信息表明,错误的值被分配给了账户的一个字段。让我们在代码中设置一个断点,重新运行测试先收集调试日志,然后重新调试日志以找到我们的代码错误。
设置断点
调试时,断点 (breakpoint) 意味着正在运行的程序在特定行号处会暂停,以便开发人员可以检查该时间点的变量值。Checkpoints
是调试 Apex 代码的一项特殊功能,是一种断点,可通过捕获更多信息。您可以根据需要设置任意多个断点,但一次最多只能设置五个 Checkpoints. 与断点相比,Checkpoints 为所有局部变量,静态变量和触发上下文变量提供了更丰富的信息。为了区分断点和检查点,断点显示为一个实心红点,而 Checkpoints 显示为一个红色圆圈,中间有一条线穿过。
在 VS Code 中,打开 AccountService.cls 文件,将光标放在有 return newAcct
语句的一行。使用快捷键 Ctrl+Shift+P
(Windows 或 Linux) 或 Cmd+Shift+P
(macOS) 来打开命令板。在搜索框中输入 sfdx checkpoint, 然后选择 SFDX: Toggle Checkpoint.
使用快捷键 Ctrl+Shift+P
(Windows 或 Linux) 或 Cmd+Shift+P
(macOS) 来打开命令板。在搜索框中输入 sfdx checkpoint, 然后选择 SFDX: Update Checkpoints in Org. 你必须告诉 Salesforce 你的 Checkpoints,以便在你的 Apex 代码执行时收集堆信息。如果你修改了你的 Apex 代码或切换了 Checkpoints, 请再次运行此命令以保持同步。
运行测试类并获取 Debug Logs
使用快捷键 Ctrl+Shift+P
(Windows 或 Linux) 或 Cmd+Shift+P
(macOS) 来打开命令板。在搜索框中输入 sfdx replay, 然后选择 SFDX: Turn On Apex Debug Log for Replay Debugger.
然后重新打开命令版,在搜索框中输入apex test
,然后选择 SFDX: Run Apex Tests. 运行完毕,打开命令板。在搜索框中输入 sfdx get, 然后选择 SFDX: Get Apex Debug Logs…, 几秒钟后,会提示你选择一个要下载的调试日志。
基于日志调试代码
在 VS Code 中,打开在上一步中下载的调试日志。你可以在 .sfdx/tools/debug/logs
文件夹中找到你用 VS Code 下载的调试日志。
右键单击调试日志中的任何一行,然后选择 SFDX: Launch Apex Replay Debugger with Current File. 几秒钟后,VS Code 会打开调试侧边栏,准备让你开始调试代码。
在调试工具栏上单击 “继续” 按钮,继续到第一个断点。如果你设置了多个断点,继续点击 Debug Toolbar 上的 Continue 按钮,直到调试器到达 AccountService.cls 中 return newAcct
语句。
在调试侧边栏中,展开 newAcct 变量,注意到 TickerSymbol 属性值 “SFDC” 与传递给 createAccount 方法的 tickerSymbol 参数值 “CRM” 不一致。
点击调试工具栏上的停止按钮,结束调试会话。
修复代码并部署到 org
修复 AccountService.cls 中的代码,将 tickerSymbol 参数分配给 TickerSymbolfield. 保存文件,然后部署代码到 Salesforce org.
1
TickerSymbol = tickerSymbol
重新运行测试类,并验证修复结果: