我有以下代码崩溃:
Try
Logger.Warn("do_databind entered.")
Session("AgentId") = AgentId
Session("section") = Section
SectionId.Value = Section.ToString()
Session("dtresponses") = dtresponses
Session("dtlv") = dtlv
lvQuestions.DataSource = dtlv
Logger.Warn("just before databind.")
lvQuestions.DataBind()
Logger.Warn("databind successful. ")
Catch ex As Exception
Logger.Error(ex)
If Not IsNothing(ex.InnerException) Then
Logger.Error(ex.InnerException)
End If
End Try
编码到达数据绑定之前的#34;"消息,然后应用程序中止。 "数据绑定成功"消息永远不会到达。
永远不会到达catch循环,因为其中的错误消息未被记录。
这已经工作了几个月,今天就放弃了工作。我认为这是服务器问题。
databind命令点上的列表视图大小只有8条记录,我知道它生成的页面总共少于10k,并且它生成了许多其他块。
在过去,我们会说这可能是堆栈冲突,但我不确定术语是否适用于VB.Net中的托管内存。捕获错误的代码可能被覆盖。除此之外,我不知道为什么它会在一夜之间停止在我们的服务器上工作。
之前有没有人遇到过这个问题?
更新:服务器在w3wp.exe中指示它是堆栈溢出错误,错误代码为0xc00000fd(即堆栈溢出)
答案 0 :(得分:0)
我没有将数据绑定或数据绑定事件用于任何事情,但它可以是一个额外的诊断,以查看可能发生内存崩溃的位置。
此应用正在测试中,因此此时我有大量的错误捕获和注释记录,以确保功能正常运行。
错误不会在程序中留下痕迹。它正被服务器捕获。如果错误是由堆栈溢出引起的,这是有意义的。它覆盖了捕获代码。
更新:
发现问题。
程序依赖于数据库,并且对数据库进行了更改,从而导致使用相同信息调用自身的递归过程。
它一直运行直到服务器上的所有系统内存都被占用,然后因堆栈溢出错误而中止。
我输入了诊断信息,直到我终于找到它。
这里的技巧是它在登台服务器上,并且开发服务器上的数据库不完全相同,因此它以正确的方式在开发服务器上工作,但由于数据库内容不同而在登台服务器上被轰炸。
我认为我的编码已经解释了导致错误的条件,但事实并非如此。
现在我知道如果我在一个加载了try-catch循环的应用程序中中止并且没有错误记录存在错误记录应该存在的情况下寻找递归问题。