为一个用户生成ASP.NET webapp错误,无法在开发中重现 - 如何调试?

时间:2011-04-20 14:09:38

标签: asp.net debugging remote-debugging

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

  

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

错误继续描述哪行代码导致错误。但是,这是在我们的生产,外部环境和我关闭调试。所以这个信息,我假设是或多或少的下铺(错误报告的代码行对我来说真的没有意义,因为它是错误的原因)。

我知道正在访问的内容为null,但我无法在我的开发环境中重现该错误,并且它对我们的其余用户群也可以正常工作。同一个用户在两周前遇到了错误,然后昨天又用另一个文件再次尝试并收到了同样的错误。

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

1 个答案:

答案 0 :(得分:1)

  1. 确定您在异常中获得的信息是否有误?做出这个假设是如此容易,我们都已经做到了,只有当你花了一点时间看它时才被证明是错误的。
  2. 确保已部署PDB(调试符号)。即使站点是在“Release”中构建的,您仍然可以将它们推出,而不是“Debug”,以确保在堆栈跟踪中获得适当的行号。
    1. 请确保部署匹配的 .PDB文件,不匹配的文件将无用。
    2. .PDB文件与版本控制一起保存在版本控制之下,如果您同时拥有这两个文件以及特定版本的代码(即处理编译后的输出和版本),则可以更轻松地测试问题。 pdb就像你的来源一样。)
  3. 使用log4net(不要编写自己的日志记录系统 - 其他人比你更好,或者我!)在日志记录中添加一些额外的工具到日志的代码中,尽可能多地记录该区域那是遇到了这个问题。
    1. 使其可以根据配置设置打开或关闭日志记录。 log4net可以很容易地做到这一点。
    2. 确保您的日志记录代码检查在使用它之前检查的所有对象为null,因此您最终不会导致NullReferenceException 导致按您的记录代码。