我得到一个“对象引用没有设置为对象的实例”错误,日志中的堆栈顶部有以下内容(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
我不明白的事情:
这是一个处于发布模式的生产系统,但我仍然可以从堆栈跟踪对象中获取行号。在这种情况下,不幸的是,错误不会在我们的调试系统上重现,所以我坚持不懈地使用它。
任何建议都将受到赞赏。
谢谢, 汤姆
答案 0 :(得分:6)
我认为您在堆栈跟踪中看到每个调用的“Line 0”,因为您的代码是在Release模式而不是Debug模式下编译的。在调试模式下,您的代码将被编译为包含调试符号文件(.pdb)。当此文件可用时,您的异常堆栈跟踪将准确表示行号。
在任何情况下,只有Page_Load的行号很重要,因为其余的是框架程序集的内部调用。
每个stacktrace条目后的+ xx数字显然是“byte offset into native code”。我承认它最初在我看来是以刻度或毫秒执行的时间。
答案 1 :(得分:2)
有关了解偏移的信息,请参阅this question。我怀疑你应该只使用调试信息构建生产二进制文件 - 这比检查IL以确定偏移意味着哪条线要容易得多。