当我们记录错误时,我们希望收集一些有关应用程序状态的信息,以帮助我们诊断原因。在我们的错误记录代码中,我们有类似以下内容:

<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被触发并不奇怪。

09-30 18:40
查看更多