当我们记录错误时,我们希望收集一些有关应用程序状态的信息,以帮助我们诊断原因。在我们的错误记录代码中,我们有类似以下内容:
<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)
异常struct中的实际Message项为空字符串,类型为
java.lang.UnsupportedOperationException
。奇怪的是,如果我们手动运行此确切的代码,它将解决问题,并且情况会持续好一会儿,但是当它再次开始发生时,它将继续发生,直到我们通过手动运行代码来“踢踢”为止。再次。就像有些事情变了样,只有我们提供帮助,它才能恢复。
在CF10和AFAIK上,我们尚未在CF或Java首次出现时的任何时间升级。
我的问题是什么原因造成的? (如果您能解释为什么我们的解决方法会暂时“修复”它,则有好处。)
编辑这是一些堆栈跟踪,从顶部开始:
java.lang.UnsupportedOperationException在
coldfusion.thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446)
在coldfusion.runtime.CgiScope.resolve(CgiScope.java:146)处
coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328)在
coldfusion.runtime.Scope.get(Scope.java:60)在
coldfusion.runtime.DotResolver.resolve(DotResolver.java:45)在
coldfusion.runtime.DotResolver.resolve(DotResolver.java:72)在
coldfusion.runtime.DotResolver.resolve(DotResolver.java:88)在
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)在
cfdump2ecfm1568701689 $ funcDUMPSTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:1957)
在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)处
coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在
coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)
在
coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)在
coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)在
coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)在
cfdump2ecfm1568701689 $ funcHANDLESTRUCT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:781)
在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)处
coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在
coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)
在
coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)在
coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)在
coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)在
cfdump2ecfm1568701689 $ funcRENDEROUTPUT.runFunction(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:693)
在coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)处
coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)在
coldfusion.runtime.UDFMethod $ ArgumentCollectionFilter.invoke(UDFMethod.java:368)
在
coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
在coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)在
coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)在
coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)位于
cfdump2ecfm1568701689._factor18(E:\ cf10_final \ cfusion \ wwwroot \ WEB-INF \ cftags \ dump.cfm:565)在..
最佳答案
我认为不应该以这种方式丢弃范围。展开您的cfloop,就可以了。
与变量不同,范围是另一种动物。我认为动态引用作用域本身是不自然的,因此Evaluate
被触发并不奇怪。