异常处理的全面指南
1. 异常消息中的信息安全
在编写异常消息时,需要格外小心其中包含的信息。特别是在软件将在有数据保护法律的国家使用时,如欧盟的《通用数据保护条例》(GDPR),这一点尤为重要。如果异常消息包含任何指向特定用户的信息,并且这些信息最终出现在日志中,可能会违反相关法律。
2. 异常的重新抛出
2.1 错误的重新抛出方式
有时候,我们需要在捕获异常后执行一些操作,然后继续抛出该异常。但有一种明显错误的做法,如下所示:
try
{
DoSomething();
}
catch (IOException ex)
{
LogIOError(ex);
// This next line is BAD!
throw x; // Do not do this
}
这种方式虽然可以编译通过,甚至看起来能正常工作,但存在严重问题:它会丢失异常最初抛出时的上下文。CLR会将其视为一个全新的异常,重置位置信息, StackTrace 和 TargetSite 会显示错误源自 catch 块内部,这会使问题难以诊断。
2.2 正确的重新抛出方式
为了避免上述问题,可以使用以下方式:
try
{
DoSomething();
}
catch (IOException ex)
{
超级会员免费看
订阅专栏 解锁全文
531

被折叠的 条评论
为什么被折叠?



