当我们记录错误时,我们喜欢收集一些关于应用程序状态的信息,以帮助我们诊断原因。在我们的错误日志代码中,我们有如下所示:
<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>实际上还有更多的内容(我们在尝试转储local.scope之前检查是否定义了它,以及与我们的信息收集相关的其他事情,但这些都是基本的比特)。local.errorInfo是我们保存起来供以后查看的部分内容。
偶尔,我们会看到一个异常,TagContext显示错误发生在代码中的cfdump行上。有趣的是,在TagContext中,我们的代码是第三项。前两个文件位于\WEB\cftag\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)
异常结构中的实际消息项为空字符串,类型为java.lang.UnsupportedOperationException。
奇怪的是,如果我们手动运行这个精确的代码,它就会清除问题,并且事情会持续一段时间,但是当它再次发生时,它将继续发生,直到我们再次手动运行代码来“踢”它。就像有些东西不稳定,除非我们帮忙,否则它是无法恢复的。
我们使用的是CF10和AFAIK,在第一次出现这种情况的时候,我们还没有升级CF或Java。
我的问题是是什么导致了这一切?(如果你能解释为什么我们的解决办法能暂时“修复”它,那就更好了。)
Edit这里有一些堆栈跟踪,从顶部开始:
coldfusion.thread.HttpServletRequestWrapper.getLocalPort(HttpServletRequestWrapper.java:446) at coldfusion.runtime.CgiScope.resolve(CgiScope.java:146) at coldfusion.runtime.CgiScope.resolveName(CgiScope.java:328) at coldfusion.runtime.Scope.get(Scope.java:60) 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) at coldfusion.runtime.NeoPageContext.SymTab_resolveDottedName(NeoPageContext.java:1011) at coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:657) at coldfusion.runtime.NeoPageContext.findAttribute(NeoPageContext.java:630) at coldfusion.runtime.CFPage.IsDefined(CFPage.java:925) at cfdump2ecfm1568701689$funcDUMPSTRUCT.runFunction(E:\cf10_final\cfusion\wwwroot\WEB-INF\cftags\dump.cfm:1957) at coldfusion.runtime.UDFMethodcoldfusion.filter.SilentFilter.invoke(SilentFilter.java:47) at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368) at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55) at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321) at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518) at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624) at cfdump2ecfm1568701689$funcHANDLESTRUCT.runFunction(E:\cf10_final\在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 )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) at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659) at cfdump2ecfm1568701689._factor18(E:\cf10_final\cfusion\wwwroot\WEB-INF\cftags\dump.cfm:565) at .
发布于 2014-01-08 18:23:50
我认为不应该以这种方式丢弃范围。打开你的弹弓,你就会没事的。
与变量不同,范围是一种不同的动物。我认为动态引用范围本身是不自然的,因此我并不奇怪Evaluate会被绊倒。
https://stackoverflow.com/questions/21002025
复制相似问题