C# 是否有一种有效的方法来识别日志数据中“对象引用未设置为对象的实例”的来源

本文关键字:对象引用 设置 实例 对象 数据 识别 是否 方法 有效 一种 日志 | 更新日期: 2023-09-27 18:31:07

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

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

当然,在调试环境中,您可以逐步完成并找到问题的根源,但是当依赖日志时,永远不会报告带有错误的行号。它始终为"在行:0 处发生异常"。

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

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

任何建议表示赞赏。

C# 是否有一种有效的方法来识别日志数据中“对象引用未设置为对象的实例”的来源

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

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

如果需要行号,请查看此帖子:在发布模式下的 .NET 程序集的堆栈跟踪中显示行号。简而言之,您需要使用应用程序/DLL 部署 PDB。

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

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

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