【问题标题】:Tracking down unhandled asp.net exception追踪未处理的 asp.net 异常
【发布时间】:2015-05-08 21:38:51
【问题描述】:

我们有一个 asp.net Web 应用程序,对于我们的一位用户,当他们单击按钮时,会在特定页面上引发异常。我无法重新创建此问题,但是当客户端收到异常时系统正在记录异常。问题是,我不知道异常是在哪里产生的。当我们记录异常时,我们在异常上调用 ToString() 方法来获取堆栈跟踪。这是一个解析错误,但我不知道它来自哪里。这是我们记录的异常:

System.FormatException:输入字符串的格式不正确。
在 System.Number.StringToNumber(字符串 str,NumberStyles 选项, NumberBuffer& 数字, NumberFormatInfo 信息, Boolean parseDecimal)
在 System.Number.ParseInt32(String s, NumberStyles 样式, NumberFormatInfo 信息)在 System.ComponentModel.Int32Converter.FromString(字符串值, NumberFormatInfo 格式信息)在 System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext 上下文、CultureInfo 文化、对象值)

我假设这是由 Global.asax 中的以下代码记录的

void Application_Error(object sender, EventArgs e) 
    {
        // Code that runs when an unhandled error occurs
        if (Server.GetLastError() != null)
        {
            Exception objErr = Server.GetLastError().GetBaseException();
            objErr.WriteExceptionLog();
        }
    }

但是,我不知道从哪里调用此代码或如何查找。关于我可以在哪里查看或在记录异常时是否需要做一些不同的事情有什么想法吗?

【问题讨论】:

  • 您也可以尝试记录内部异常。您也不知道它是在某个地方将字符串转换为数字。我不知道你这样做的频率如何,但你总是可以在你的项目中搜索你进行转换的地方,然后改用 tryparse 之类的东西。
  • 如果您改为登录 Server.GetLastError() 会发生什么?并确保您正在记录 Server.GetLastError().ToString()

标签: c# asp.net


【解决方案1】:

给你:

void Application_Error(object sender, EventArgs e) 
{
    // Code that runs when an unhandled error occurs
    if (Server.GetLastError() != null)
    {
        Exception err = Server.GetLastError().InnerException;

        // handle error here

        Server.ClearError();
    }
}

【讨论】:

  • 如果没有内部异常怎么办?
  • 应该有,因为在这种情况下Server.GetLastError() 总是会给你一个HttpUnhandledException,它本质上是一个包装器。
  • 啊...如你所知,我不经常GetLastError() :-)
  • 我会试试这个。我应该在星期五知道一些事情。谢谢。
  • 我最终只使用了 Server.GetLastError() 而没有指定任何其他属性。我们记录了整个堆栈跟踪,因此我们需要顶级异常。此外,我能够追踪到这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 2012-07-26
  • 2013-11-28
  • 2014-06-18
  • 1970-01-01
  • 2017-05-08
  • 2021-06-16
相关资源
最近更新 更多