当我们记录错误时,我们希望收集有关应用程序状态的一些信息,以帮助我们诊断原因。在我们的错误记录代码中,我们有类似这样的内容:
<cfset local.scopeList = "CGI,FORM,URL,APPLICATION,REQUEST,COOKIE,CLIENT" />
<cfsavecontent variable="local.errorInfo">
<cfloop list="#local.scopeList#" index="local.scope">
<cfdump var="#Evaluate(local.scope)#" />
</cfloop>
</cfsavecontent>
实际上还有更多的东西(我们检查是否在尝试cfdump之前定义了local.scope以及与我们的信息收集相关的其他一些事情,但这些是基本的部分)。 local.errorInfo
是我们为以后观看而留下的东西的一部分。
偶尔我们会看到一个异常,TagContext显示错误发生在我们代码中的cfdump行上。有趣的是,在TagContext中,我们的代码是第三项。前两个在\ WEB-INF \ cftags \ dump.cfm中,它们的RAW_TRACE信息看起来像
at cfdump2ecfm1568701689._factor4({path on server}\WEB-INF\cftags\dump.cfm)
和
at cfdump2ecfm1568701689._factor1({path on server}\WEB-INF\cftags\dump.cfm)
异常结构中的实际Message项为空字符串,类型为java.lang.UnsupportedOperationException
。
奇怪的是,如果我们手动运行这个确切的代码,它会清除问题并且事情会持续一段时间,但是当它再次开始发生时它将继续发生,直到我们通过运行“给它一个踢”再次手动代码。这就像有些东西变得不稳定,直到我们帮助它才能恢复。
我们在CF10和AFAIK上,我们在接近第一次开始发生时的任何时间都没有升级CF或Java。
我的问题是造成这种情况的原因是什么? (如果你能解释为什么我们的解决方法会暂时“修复”它,你会获得奖励。)
编辑这里有一些堆栈跟踪,从顶部开始:
java.lang.UnsupportedOperationException at coldfusion.thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446) 在coldfusion.runtime.CgiScope.resolve(CgiScope.java:146)at coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328)at coldfusion.runtime.Scope.get(Scope.java:60)at coldfusion.runtime.DotResolver.resolve(DotResolver.java:45)at coldfusion.runtime.DotResolver.resolve(DotResolver.java:72)at coldfusion.runtime.DotResolver.resolve(DotResolver.java:88)at coldfusion.runtime.NeoPageContext.SymTab_resolveSplitName(NeoPageContext.java:1033) 在 coldfusion.runtime.NeoPageContext.SymTab_resolveDottedName(NeoPageContext.java:1011) 在 coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:657) 在 coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:630) 在coldfusion.runtime.CFPage.IsDefined(CFPage.java:925)at cfdump2ecfm1568701689 $ funcDUMPSTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:1957) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)at at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)at at cfdump2ecfm1568701689 $ funcHANDLESTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:781) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)at at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)at at cfdump2ecfm1568701689 $ funcRENDEROUTPUT.runFunction(E:\ cf10_final \ cfusion \ wwwroot的\ WEB-INF \ cftags \ dump.cfm:693) 在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)at coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368) 在 coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) 在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)at at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)at at .....在
的cfdump2ecfm1568701689._factor18(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:565)
答案 0 :(得分:0)
我认为范围不应该以这种方式倾倒。展开你的cfloop,你应该没事。
与变量不同,范围是一种不同的动物。我认为动态引用范围本身是不自然的,因此我对Evaluate
被绊倒并不感到惊讶。