我读了很多关于捕捉基数异常的错误,我不得不承认我也这样做了:
try{
...
}
catch (Exception exception){
MessageBox.Show(exception.Message, "Error!");
MyLogger.Log(exception.Message);
}
现在我想做对,并对此有一些疑问:
答案 0 :(得分:7)
抓住您可以合理处理的任何例外情况。例如,如果您尝试打开文件进行写入,则应该预期文件可能标记为只读,因此会引发异常。但是在相同的情况下,你不会试图捕获一个null参数异常,因为这可能是程序员错误造成的。
它们应该在MSDN的函数参考中找到(你必须在每一个上查找它)。对于用户定义的函数,除非有其他文档或摘要注释,否则您将不得不进行挖掘。
3,4。考虑使用logging library for .NET
答案 1 :(得分:5)
我有一件事要补充。如果您只想在不影响程序流的情况下记录异常,则可以始终执行此操作:
try
{
...
}
catch (Exception exception)
{
MyLogger.Log(exception.Message);
throw;
}
答案 2 :(得分:2)
答案 3 :(得分:2)
您可以在应用程序事件文件
中为未处理的异常设置事件(这里有一个VB样本,但我希望你明白这一点)
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
End Sub
您可以在项目的选项中找到应用程序事件。
答案 4 :(得分:1)
你应该只捕捉你可以做的事情,真的。
这是经验法则。我通常会在我的Program.Main
周围进行try / catch,以防异常冒泡到顶部并需要记录。您还可以处理CurrentDomain_UnhandledException
事件,以防在UI线程之外的其他线程中抛出异常(假设您是多线程)。
答案 5 :(得分:1)
回应“4.还有其他任何建议吗?”:
在示例代码中,在记录异常之前会显示一个消息框。我建议在显示消息之前记录异常,以防万一用户看到错误消息,恐慌,并在没有单击“确定”的情况下去度假。这是一个小问题,但是消息框会无限期地阻止程序,应该谨慎使用!