Debugging 调试超出Apex CPU时间限制时丢失的持续时间

Debugging 调试超出Apex CPU时间限制时丢失的持续时间,debugging,logging,salesforce,apex,visualforce,Debugging,Logging,Salesforce,Apex,Visualforce,我愿意在本节中发布代码来完成优化,但它有点长,有点复杂,所以我希望有人能帮助我解决一些调试问题。我的目标是找出导致我的Apex CPU时间限制超出问题的原因 在基本或正常布局中使用调试日志时,我收到消息 最大CPU时间:10000中的15062**接近极限 我已经多次优化和重新编写了各种循环和查询,在每种情况下,这个数字都在那里,这让我相信这是在骗我,我的实际使用量远远超过了这个数字。因此,在我的旅程中,我将开发人员控制台的日志面板切换到分析,希望能够准确地分离出让我头痛的代码的循环、方法或区域

我愿意在本节中发布代码来完成优化,但它有点长,有点复杂,所以我希望有人能帮助我解决一些调试问题。我的目标是找出导致我的Apex CPU时间限制超出问题的原因

在基本或正常布局中使用调试日志时,我收到消息

最大CPU时间:10000中的15062**接近极限

我已经多次优化和重新编写了各种循环和查询,在每种情况下,这个数字都在那里,这让我相信这是在骗我,我的实际使用量远远超过了这个数字。因此,在我的旅程中,我将开发人员控制台的日志面板切换到分析,希望能够准确地分离出让我头痛的代码的循环、方法或区域

这就引出了我的主要问题

执行树、性能树和执行单元

所有这些都表明我的持续时间低于10000毫秒的限额。我最大的消耗量是3556.19ms,它被我在构造函数方法中创建和使用的包装类使用,其中有相当多的逻辑正在构建一个相当复杂的包装类,该类跨越5-7个自定义对象。尽管如此,即使是3000毫秒,这个过程的剩余部分显示,在可忽略不计的时间内,我的总时间仍在4000毫秒左右。我的问题是。。。。为什么我看不到或找不到消耗我所有时间的东西

不正确的迭代数据

除此之外,在性能树上还有一列数据,显示每个方法的迭代次数。我知道我的生产组织有81个对象,它们基本上会调用我的定制包装器对象的构造函数。也就是说,我的构造函数应该被调用81次,但是它被调用了32次。所以我的另一个问题是,我可以依赖列中的迭代数据吗?或者因为它迭代了很多次,所以它在某个点停止计数了吗?我的一个对象可能已损坏或以某种方式导致无限循环,但如果迭代数据无论如何都不准确这是一个已知问题,我不想通过挖掘所有数据来寻找该结论

在生产组织中调试

最后一个问题是为什么我的System.Debug()行没有显示在生产组织的开发人员控制台中。我在整个代码中添加了几个breadcrumb,这将帮助我隔离哪些对象正在通过,哪些对象没有通过,但是,我无法在任何布局视图系统中。在沙盒之外调试消息


很抱歉问了这么多问题,但我确实想真诚地努力更好地理解Salesforce中的调试过程。如果这是一个失败的原因,我很高兴开始分享一些代码,但希望一些调试技巧可以帮助我找到解决方案。

您的调试日志可能被截断,请参阅“每个调试日志必须为20 MB或更小。如果超过此数量,您将无法看到所需的所有内容。” 下载日志并搜索类似于“跳过123456字节的详细日志”的文本进行确认,一些system.debug语句将不会显示

您可能需要微调日志级别(不记录验证规则和工作流?不使用“精细”级别记录每个变量分配等)。您可能必须将所有标志设置为“无”,然后只跟踪一个您怀疑的特定类/触发器(请参阅和)

如果它被截断,分析工具可能会放弃(老实说,我和console的运气不太好,有时提供概述很好,但它也无法解析20 MB的日志


当所有其他操作都失败时,您可以将日志加载到记事本++(或您选择的任何编辑器),查找与方法输入/方法输出相关的行(您可能需要正则表达式搜索),将这些筛选行带到excel,玩“文本到列”游戏只需手动查看计时,看看是否有导致峰值的记录。因为可能是10,这就是问题所在,它耗尽了81中32的限制并不意味着什么。像
[METHOD_ENTRY | METHOD_EXIT]这样搜索MyTriggerHandler.onBeforeUpdate
可能是一个好的开始。但首先要确保日志不会被截断。

像往常一样,您是来救我的,先生。非常感谢。是的,日志被截断了,这让我最头疼。当我将日志降低到调试级别时,我才能够检查我的语句。我在我的代码中仔细放置以找到罪魁祸首。出于某种原因,我认为我没有看到调试代码行,因为我没有看到足够的日志。我没有意识到,这是最优秀的模式,实际上在一开始就伤害了我。再次感谢!很高兴我能帮助:)是的,这是一个讨厌的“功能”,这个20MB限制(他们已经增加了,以前要小得多;10年前提高了,哈哈。人们还在评论)。而且这不是你以前可以轻松阅读和计划的东西,它只是击中你,你浪费了一个星期,然后你还记得它…嗯