【问题标题】:Production ASP.NET webapp error for one user, can't reproduce in development- how do I debug?一位用户的生产 ASP.NET webapp 错误,无法在开发中重现 - 我该如何调试?
【发布时间】:2011-08-09 13:18:50
【问题描述】:

我继承了一个面向客户的 asp.net Web 应用程序,客户可以在其中将文件上传到我们的文件服务器。它适用于除一个人之外的所有用户。两周前,她尝试上传文件并收到以下错误:

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

错误继续描述导致错误的代码行。但是,这是在我们的生产、外部环境中,我已经关闭了调试。因此,我假设这些信息或多或少是废话(错误报告的代码行对我来说真的没有意义,因为它是错误的原因)。

我知道正在访问的某些内容为空,但我无法在我的开发环境中重现该错误,并且它对我们的其他用户群运行良好。同一个用户在两周前遇到了这个错误,然后昨天用不同的文件再次尝试并收到同样的错误。

我知道这一切听起来很模糊,但我想我的问题是有没有人对如何跟踪用户的执行错误有任何好的想法,以便我可以准确地了解是哪一行代码真正导致它?就像我说的那样,我无法在开发、生产、内部、外部重现该错误,并且没有其他用户遇到问题。我唯一的想法是向我们面向客户的生产站点发布调试版本,但我真的不想这样做。谢谢!

【问题讨论】:

    标签: asp.net debugging remote-debugging


    【解决方案1】:
    1. 您是否确定您在异常中获得的信息是错误的?做出这样的假设很容易,我们都做过,但当你花一点时间研究它时,就会被证明是错误的。
    2. 确保您已部署 PDB(调试符号)。即使站点是在“发布”而不是“调试”中构建的,您仍然可以将这些推送出去,以确保您在堆栈跟踪中获得适当的行号。
      1. 确保部署匹配 .PDB 文件,不匹配的文件将没有任何用处。
      2. .PDB 文件与您的可发布文件一起保存在版本控制下,如果您同时拥有这两个文件以及该特定版本的代码(即,将您的编译输出和.pdb 视为你会是你的来源)。
    3. 为记录的代码添加一些额外的工具,使用类似 log4net 的东西(不要编写自己的记录系统 - 其他人比你或我更擅长它!)记录尽可能多的区域周围的状态那就是遇到问题。
      1. 使其能够根据配置设置打开或关闭日志记录。 log4net 可以轻松做到这一点。
      2. 确保您的日志记录代码在使用它们之前检查它检查的所有对象是否为空,这样您就不会以 导致 NullReferenceException您的日志记录代码。

    【讨论】:

    • 这一切都说得通。我最终以不同的方式(跟踪的数据库事务日志)找出了问题,但所有点都是有效的,强烈推荐!感谢您的信息。
    • @Alex,很高兴这些信息很有用,尽管不适用于这个特定问题 =)
    猜你喜欢
    • 2012-09-17
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多