解密YSOD,技术到混乱

时间:2008-10-17 20:01:59

标签: asp.net debugging

有多少可以联系到这个?

  

/ Application

中的服务器错误      
     

未将对象引用设置为对象

     

描述:未将对象引用设置为对象。

     

异常详细信息: System.NullReferenceException:未将对象引用设置为对象。

     

来源错误:

Line 56:    posts.Add(post);

更严重的是,当你看到时,你首先要寻找的是什么 黄色的死亡屏幕?有一半的时间调试跟踪实际上没有告诉你问题是什么(我猜是可以理解)。

我必须承认,我仍然比{I}更多地使用Response.Write。我只是懒得通过调试器。您使用什么技术来调试问题?

5 个答案:

答案 0 :(得分:1)

如果我无法使用页面显示的错误消息识别/解决问题,我通常会尝试使用Windows事件查看器来帮助我确定导致问题的原因。

例如,SharePoint错误有时远不如描述性错误。所以,我将把我在Y.S.O.D.上看到的东西结合起来。来自事件查看器的错误消息,以帮助我缩小原因。

我会尽力向同事或其他同事询问我认为可能有一些可能有帮助的经验。如果我仍然无法确定原因,我将使用Google提供所有信息。

答案 1 :(得分:1)

以下是我尝试减少YSOD数量的方法。在开始处理应用程序时,我要做的第一件事就是创建一个自定义异常类。

  • 添加SQL等属性 声明正在运行。两个显示 消息文本字段,一个用于显示 用户,一个用于显示 开发人员(在调试模式下)是谁 登录用户。获取所有表格 变量让你知道它们是什么 试图进入。

  • 在某处记录错误(事件日志 很好,如果你可以访问网络 服务器;记录到数据库是 这么多人不太成功 例外情况是无法访问 数据库)。

  • 在MasterPage或网页基类页面错误事件和应用程序错误事件中创建代码以进行日志记录。

  • 创建自定义错误页面。什么时候进去 调试模式,自定义错误页面 显示一切。什么时候不在 调试模式(生产),显示 只选择的属性 自定义例外。

预先投入时间来为您节省数小时的痛苦。

答案 2 :(得分:0)

我通常使用Cassini Web服务器(随VS 2005/2008提供)在本地计算机上进行调试。如果我在我的QA上看到例外,或者天堂禁止,我的生产箱通常是因为我忘记更新我的连接字符串,以便它们指向QA /生产数据库而不是本地机器。

在其他情况下,我发现堆栈跟踪非常有助于确定断点的位置,因此我在调试器中逐步执行它并在运行时检查数据。我在页面上编写任何调试信息的唯一一次是在尝试查找一些我无法在开发人员实例上复制的性能问题时。在这种情况下,我写了一些隐藏的字段,其中包含有关渲染过程各个部分的时序信息。

答案 3 :(得分:0)

假设您处于调试模式,提供的错误信息将为您提供有关错误实际发生在哪一行的信息,以及导致错误的代码行。这个信息应该为您提供一个良好的开端,用于定义设置断点以进行调试的位置。

我曾经在很多个月前穿过你的鞋子,使用response.write进行调试。一旦你开始使用IDE和调试器,你就会发现自己拉出更少的头发并更快地获得解决方案。

此外,在调试时打开即时窗口会让你的生活更加幸福。

答案 4 :(得分:0)

使用像log4net这样的体面日志框架,并且在使用DEBUG级日志记录时要自由。

它本质上是Response.Write方法的一个更简洁的版本,可以保留在您的生产代码中,并在需要时“打开”。