我该如何解释这个C#堆栈跟踪?第零行出错

Tom*_*nza 1 c# asp.net exception stack-trace

我得到一个"对象引用没有设置为对象的实例"错误,日志中的堆栈顶部有以下内容(C#ASP.NET应用程序):

@Web.UI.UserBrochurePage.Page_Load(Object,EventArgs)+25 Line: 0  
@System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr,Object,Object,EventArgs)+0 Line: 0  
@System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object,EventArgs)+26 Line: 0  
@System.Web.UI.Control.OnLoad(EventArgs)+38 Line: 0 
@System.Web.UI.Control.LoadRecursive()+35 Line: 0
@System.Web.UI.Page.ProcessRequestMain(Boolean,Boolean)+1160 Line: 0 
Run Code Online (Sandbox Code Playgroud)

我不明白的事情:

  1. 每个错误都在第零行
  2. 最有趣的错误(前一个 - 在我的代码中)后面有一个"+25".我从来不明白那些意思是什么,虽然我认为它们是线上的字符偏移......如果是这种情况,它就不会指向任何有意义的东西(参数声明的中间).

这是一个处于发布模式的生产系统,但我仍然可以从堆栈跟踪对象中获取行号.在这种情况下,遗憾的是,错误不会在我们的调试系统上重现,因此我坚持不懈地使用它.

任何意见,将不胜感激.

谢谢,汤姆

Cer*_*rus 6

我认为您在堆栈跟踪中看到每个调用的"Line 0",因为您的代码是在Release模式而不是Debug模式下编译的.在调试模式下,您的代码将被编译为包含调试符号文件(.pdb).当此文件可用时,您的异常堆栈跟踪将准确表示行号.

在任何情况下,只有Page_Load的行号很重要,因为其余的是框架程序集的内部调用.

每个stacktrace条目后的+ xx数字显然是" 到本机代码的字节偏移 ".我承认它最初在我看来是以滴答或毫秒执行的时间.

  • +1用于解释+ xx.来这里就是为了这个目的. (6认同)
  • 您也可以为发布版本创建PDB. (2认同)