gpt4 book ai didi

c# - 为什么大多数异常都忽略特定于实例的信息?

转载 作者:可可西里 更新时间:2023-11-01 08:25:10 25 4
gpt4 key购买 nike

我注意到大多数异常消息不包含特定于实例的详细信息,例如导致异常的值。他们通常只告诉您错误的“类别”。

例如,当尝试用 3rd 序列化一个对象时。派对库,我收到一个 MissingMethodException 消息:

"No parameterless constructor defined for this object."

在很多情况下这就足够了,但通常(通常在开发过程中)会出现这样的消息

"No parameterless constructor defined for this object of type 'Foo'."

可以直接找到错误原因,从而节省大量时间。

InvalidArgumentException 是另一个例子:它通常会告诉您参数的名称而不是它的值。这似乎是大多数框架引发的异常的情况,但也适用于第 3 方库。

这是故意的吗?

暴露内部状态(如变量的“错误”值)是否存在安全隐患?

最佳答案

我能想到的两个原因:

首先,可能引发异常的参数是一个值,该值是传递给公共(public)接口(interface)的值的处理形式。如果没有捕获以重新抛出在大多数方面都相同的不同异常的代价,该值可能没有意义。

其次,更重要的是,确实存在安全风险,很难事后猜测(如果我正在编写一个通用容器,我不知道它将是什么上下文用于)。如果我们能提供帮助,我们不希望“信用卡:5555444455554444”出现在错误消息中。

最终,最有用的调试信息会因错误而异。如果类型、方法和(如果可能)文件和行号还不够,那么是时候编写一些调试代码来捕获您确实想知道的内容,而不是在下次您时提示它尚未捕获可能需要不同的信息(实例的字段状态可能与参数一样有用)。

关于c# - 为什么大多数异常都忽略特定于实例的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8476676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com