C# 异常对象是否包含导致异常的实际值?

C# does an exception object contain the actual value that caused the exception?

当 Visual Studio 报告堆栈跟踪时,我有时会得到类似 "String value is not a valid DateTime" 的信息。这个问题与那个错误无关,但是当我查看异常时,我永远找不到实际值。比如是“3”,还是"Hello"?我通常会在程序中回溯以获取它。我的问题是,当我们谈论 .NET 调用时,异常对象是否真的在某处包含导致异常的值?

不,不是。通常这不是一个坏主意 - 当抛出自己的异常时 - 在可能的情况下在消息中提供它。但即使是标准方法也没有。就这么简单

这就是为什么一些项目会编写大量日志文件,记录每个函数调用的所有值(看到),生成数 TB 的信息,然后快速处理。

这取决于异常的设计以及如何捕获该异常。

如果它可以暴露一些敏感信息,您应该避免包含这些值。

否则您可以考虑填充 Exception.Data IDictionary ,这对于错误调查非常有用。