在.net app中解决非常间歇性的异常

时间:2009-12-21 15:55:06

标签: .net debugging exception

我有一个asp.net MVC应用程序在生产中很少但非常一致地抛出相同的异常,我不知道为什么。无论我做什么,我都不能在生产和开发环境中重现异常。

我正在记录所有未处理的异常。我有每个记录的异常的日期/时间,控制器,操作,异常消息和调用堆栈。所以,我很清楚这是怎么回事。不是为什么。

要解决,我正在考虑将此代码包装在try / catch中并手动记录所有相关变量的名称/值。我会部署这种新的日志记录功能,一旦解决了,我就会将其删除。

但是,我在想我是多么认为有更好,更便携的方法。有人可以帮忙吗?

修改

This is what I am currently working off of.

2 个答案:

答案 0 :(得分:2)

您是否考虑过使用ELMAH

  

ELMAH(错误记录模块和   处理程序)是一个应用程序范围的错误   完全记录设施   可插拔。它可以动态添加   到正在运行的ASP.NET Web应用程序,   甚至所有ASP.NET Web应用程序   在一台机器上,没有任何需要   重新编译或重新部署。

     

一旦ELMAH被放入了   运行Web应用程序并进行配置   适当地,你得到以下   设施没有改变单一   你的代码行:

     
      
  • 记录几乎所有未处理的例外情况。
  •   
  • 远程查看已重新编码的例外日志的网页。
  •   
  • 用于远程查看任何已记录内容的完整详细信息的网页   异常。
  •   
  • 在许多情况下,您可以查看死亡的原始黄色屏幕   ASP.NET为给定生成的   异常,即使使用customErrors模式   关掉了。
  •   
  • 发生时每个错误的电子邮件通知。
  •   
  • 日志中最近15个错误的RSS提要。
  •   

ELMAH不会记录应用程序的状态,但也许您可以抛出一个自定义异常,封装您需要查看的任何状态。您是否希望记录类似核心转储的内容?也许像debugdiag这样的东西会更好:

  

调试诊断工具(DebugDiag)旨在帮助解决诸如挂起,性能降低,内存泄漏或碎片以及任何用户模式进程崩溃等问题。该工具包括其他调试脚本,主要关注Internet信息服务(IIS)应用程序,Web数据访问组件,COM +和相关的Microsoft技术。

答案 1 :(得分:0)

您是否正在某处捕获数据库异常,并且您的模型变量不会被填充,或者您的代码没有分支以指示需要再次尝试(即错误页面/消息)?

我也建议ELMAH,它会从请求中为您提供很多HTTP / REQUEST / RESPONSE类型标头,它可能有足够的信息让您更好/更快地调试问题。你可能需要做一些工作来让Elmah工作,因为你已经拥有了一个全能的处理程序/日志记录机制,所以ELMAH几乎没有任何未被捕获的异常可以直接处理。