Debugging 为什么Coldfusion偶尔会抛出错误?

Debugging 为什么Coldfusion偶尔会抛出错误?,debugging,coldfusion,coldfusion-10,Debugging,Coldfusion,Coldfusion 10,例如,我有一个页面。我可以加载这个页面100次没有错误。然而,有时有人会出错,因为我使用OneError方法从ColdFusion发送电子邮件。我得到的不多,但我得到的比我认为应该得到的更多。“调试”是不可能的,因为它不会一直发生。一天一次,也许在某一页上 有人见过类似的东西吗 一个exmaple: if((StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) ||

例如,我有一个页面。我可以加载这个页面100次没有错误。然而,有时有人会出错,因为我使用OneError方法从ColdFusion发送电子邮件。我得到的不多,但我得到的比我认为应该得到的更多。“调试”是不可能的,因为它不会一直发生。一天一次,也许在某一页上

有人见过类似的东西吗

一个exmaple:

if((StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0) return '<a #class# #target# #linkid# #pageid# href="#url#">#title##fileext#</a>';
    else return '<a class="youtube_video" #target# #linkid# href="http://www.youtube.com/v/#itm.video_code#?version=3&autoplay=1&rel=0&modestbranding=1">#title#</a>';

这是代码中的一个bug

当有人问你这样的问题时,这是标准的自动回答,因为几乎总是这样

当然,您可能已经在ColdFusion中发现了一个缺陷,但是在一个已建立的产品中发现缺陷的几率要远远低于在特定代码/配置中发现错误的几率

以提供的卷积代码为例,很可能是您的代码中的一个错误。

编程语言有时可能会错误解析或诸如此类的事情

简单地说,不是。没有任何解析级别的构造会使解析器表现出不同的行为,解析只进行一次,然后使用相同的编译代码(直到清除或服务器重新启动)。

为什么这不会失败100次,失败一次

再看看这个例子,这很可能是一个范围问题-您正在检查
参数.itm
上是否存在StructKeyExists,但随后在代码中仅使用
itm
ColdFusion存在线程问题,在重载时可能会出现未限定范围的变量。


用于检查未定义范围的变量。

这是代码中的一个实际错误。
如果
条件为:

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0
(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code'))
这意味着
else
条件为:

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0
(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code'))
因此,
else
子句将在
ARGUMENTS.itm.video\u code
存在且不为空时执行,或不存在时不为空。在后一种情况下,第二行的
itm.video\u code
引用将失败


我无法解释为什么错误会断断续续地发生。我认为你需要看看不同的呼叫者,看看为什么这个论点有时不存在。

你需要发布代码让别人能够帮助你,而不仅仅是说“it错误”。如果你抱着无法调试的态度,那么就没有什么可发布的了。我不是在问关于特定代码行的特定问题。发生错误的代码只是在这个特定的页面加载上。其他1000页的内容都很好。它是一个基于SQL查询的条件语句。然而,我在其他代码行的其他页面上得到了类似的东西。Ramdon错误,这在我访问页面时不会发生。没有基于会话或类似的内容。您得到的错误消息是什么?好的,我会发布代码,但这只是一个实例。还有一些看似随机的东西,这些东西总是可以调试的。尝试/捕获出错的代码行,并将构成逻辑的所有变量写入日志文件,以验证它们是否都具有您期望的值。这本可以解决这个问题,因为您已经发现了您(以及您的逻辑)没有预料到的事件组合。这将导致您修复逻辑,问题就会消失。我怀疑这与运算符优先级有关<代码>!表达式==0被解析为
!(expression==0)
,而不是
(!expression)==0
。我毫不怀疑我使用的代码中存在bug。它是在过去三年中由不同的程序员编写的。我在问一个一般性的问题。。。编程语言有时可能会错误解析或诸如此类的事情。我不知道,但值得一问。一页cna可能会被处理100次,但偶尔会在没有任何变化时抛出一个错误。为什么它只会发生。。。每隔一段时间?我们的一个程序员喜欢双重否定和三元运算符,这使代码非常适合筛选。啊。。。现在这有点道理了。在服务器/应用程序重新启动后,以及一年中的某些时候,当我们处于重载状态时,我们会有更多这样的问题。这回答了我最初的问题。我不是想成为一个笨蛋或懒虫,不展示代码。我知道存在潜在的bug,但知道我们的代码看起来有多糟,以及未作用域变量可能有多糟糕,这使得未作用域变量更加重要。谢谢你的帮助。我可以验证@Barmar所说的。至于为什么它会断断续续地发生?我假设,
arguments.itm
存在,但
arguments.itm.video\u code
不存在的情况只是间歇性地发生。顺便说一句,你那里的条件逻辑很难破译。如果可能的话,你应该修改它。举个例子,如果逻辑更清晰,那么逻辑错误就更容易发现。我不得不应用德·摩根定理四次来简化它。读了这篇文章后,我的头很痛。我不知道为什么逻辑不仅仅是如果(它存在并且有长度){做它}或者{不做它}。这不就是(或者至少应该是)它的意义吗?