c# - 是否可以捕获对象引用上的哪个对象未设置为对象的实例。错误

标签 c# asp.net error-handling runtime-error

我有一个使用 C# 的 ASP.net 网站。当前框架是4.5

我有一个全局意外错误捕获功能。

它位于 global.asax

这是我如何捕捉

    void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    if (Server.GetLastError() != null)
        if (Server.GetLastError().GetBaseException() != null)
        {
            Exception objErr = Server.GetLastError().GetBaseException();
            ErrorLogger.LogError(Request.Url.ToString(), objErr.Message.ToString(), objErr.StackTrace.ToString());
            if (objErr.Message.IndexOf("does not exist") != -1)
            {
                Response.RedirectPermanent("Error404.aspx");
            }
        }
}

现在它可以捕获错误,而且很多时候有大量信息可以用来调试错误。但是有 1 个错误,我无法获得足够的信息。

未将对象引用设置为对象的实例。

它不提供任何关于它是哪个对象的信息。有什么办法可以得到更多的信息吗?

这是一个典型的错误

Object reference not set to an instance of an object.
   at gamepage.Page_Load(Object sender, EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

非常感谢您的回答。

最佳答案

NullReferenceException 不携带有关变量的信息,该变量是 null,不。

It doesn't give any information about which object it is.

就是这样……它不是一个对象。它是对预期对象所在位置的引用,但那里没有对象。 null 字面意思是缺少信息。

处理 NullReferenceException 的方法是精心设计您的代码,以便:

  1. 它没有发生,或者
  2. 它以一种潜在的预期方式发生,您检查它并抛出一个自定义信息异常(它仍然可以是一个 NullReferenceException,只有一条自定义消息)或以某种方式记录/保留信息并有意义地继续执行应用程序。

由于没有完美的代码或开发人员,因此完全可以预料到有人会不时地通过检查和平衡。还行吧。在这种情况下,应该很容易识别哪个对象是 null。堆栈跟踪应该指向一个特定的方法(甚至可能是特定的代码行,这取决于运行时可用的信息)并且不应该有很多潜在的NullReferenceExceptions 那里。如果有,该方法是草率的,无论如何都应该清理。

发生这种情况时,通过调试和调查确定null 的对象,并更新代码以处理该对象潜在的null 情况。

关于c# - 是否可以捕获对象引用上的哪个对象未设置为对象的实例。错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24652304/

相关文章:

java - 为什么 Java/Scala 使用 extends/implements 关键字?

c# - 什么数据结构适合这个?

c# - 循环数组 - 从最后跳到第一个,反之亦然?

c# - 获取 ASP :Menu to center in the middle of the page

C# 方法的作用

reactjs - 如何防止 React 在错误时重新创建组件树?

控制台打印Qt错误;如何查看它的来源?

c# - 一个程序在我的计算机上运行良好,但是当我将它发送到另一个使用荷兰 Windows 的计算机上时,它的 DateTimePicker 出现问题

javascript - 将 @Html.TextBox 更改为常规 html 代码

android - 销毁 HistoryRecord 超时