0

我遇到的一个常见问题是在我的日志中发现异常,其中包含以下消息:

Process: Ems.MailServer.Service    Exception occurred at line: 0    Exception: Object reference not set to an instance of an object.

当然在debug环境下,你可以单步调试,找到问题的根源,但是依赖日志的时候,从来没有报错的行号。它始终是“第 0 行发生异常”。

有没有办法记录可能给出行号或空变量名称的信息?

(请不要回答——“你应该检查 null”,当然如果有任何预期的 null 变量,我会检查,但检查每个变量是不切实际的)

任何建议表示赞赏。

4

3 回答 3

5

您应该将您的产品与其 pdb 文件一起部署。这样,您将获得正确的行号信息。

于 2013-09-12T11:15:27.547 回答
3

注销带有异常的堆栈跟踪(老实说,这是标准做法)。这可以作为StackTrace异常对象的属性找到。

如果您想要行号,请查看此帖子:Display lines number in Stack Trace for .NET assembly in Release mode。简而言之,您需要使用应用程序/DLL 部署 PDB。

于 2013-09-12T11:17:48.397 回答
0

如果您可以控制日志输出,并且您有一个最顶层的应用程序代码(例如 main 方法),那么您应该在那里添加一个最顶层的 try catch,并且应该尝试将StackTrace捕获的异常打印到日志中。此堆栈跟踪将告诉您从其起源开始的整个错误传播。

特别是您的情况,您应该捕获NullReferenceException异常。

您也可以从这篇文章中尝试有用的答案。

于 2013-09-12T11:19:46.627 回答