-6

例如,我有一个页面。我可以加载此页面 100 次而不会出错。但是,有时有人会收到错误消息,因为我在 onError 方法中收到了从 ColdFusion 发送的电子邮件。我得到的不多,但我得到的比我想象的要多。“调试”是不可能的,因为它不会一直发生。一天一次,可能在给定的页面上。

有没有人见过类似的东西。

一个例子:

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>';

在此页面请求中,项目结构中有 video_code。但是当处理第二行时 video_code 是未定义的。我可以再运行页面 100 次,但这不会发生。

objectType  class coldfusion.runtime.Struct
element VIDEO_CODE
Resolvedname    ITM
Detail  
ErrNumber   0
Message Element VIDEO_CODE is undefined in ITM.
Type    Expression
Trace:  Template    Line
D:\www\websites\assets\cfcs\menu.cfc    240
D:\www\websites\assets\cfcs\menu.cfc    209
D:\www\websites\assets\cfcs\menu.cfc    15
D:\www\websites\assets\templates\distance_general\campus_index_page.cfm 120
D:\www\websites\domain.com\index.cfm    1
4

2 回答 2

5

这是您的代码中的错误。

这是当有人提出像您这样的问题时的标准自动响应,因为几乎总是如此。

当然,您有可能发现了 ColdFusion 中的缺陷,但在已建立的产品中发现错误的几率 明显低于在特定代码/配置中发现错误的几率。

鉴于作为示例提供的复杂代码,它可能是您代码中的错误的可能性非常高。

编程语言有时会错误解析或类似的东西。

简单地说,没有。不存在会使解析器行为不同的解析级构造,并且解析完成一次​​,然后使用相同的编译代码(直到清除或重新启动服务器)。

为什么这不会失败 100 次并失败一次?

再次查看该示例,这很可能是一个范围问题——您正在检查 StructKeyExists,ARGUMENTS.itm但随后只是itm在代码中使用。ColdFusion 存在与非作用域变量有关的线程问题,这些问题在负载过重时会显现出来。

使用varscoper检查未作用域的变量。

于 2013-01-15T17:44:10.970 回答
2

这是您代码中的实际错误。if条件是:

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code')) == 0

这意味着else条件是:

(StructKeyExists(ARGUMENTS.itm, 'video_code') && len(trim(ARGUMENTS.itm.video_code)) || !StructKeyExists(ARGUMENTS.itm, 'video_code'))

因此该else子句将在ARGUMENTS.itm.video_code存在且不为空不存在时执行。在后一种情况下,itm.video_code第二行的引用将失败。

我无法解释为什么错误会间歇性发生。我认为您需要查看不同的调用者,以了解为什么有时该论点不存在。

于 2013-01-15T18:10:28.973 回答