c# - .NET 错误处理

标签 c# .net exception-handling

我一直在编写 .NET 应用程序,并且对该框架中包含的错误处理印象深刻。

当捕捉到进程抛出的错误或代码中某处的错误时,我喜欢包含消息(ex.Message,通常非常通用)以及堆栈跟踪(ex.stacktrace) 这有助于将问题追溯到特定位置。

举个简单的例子,假设我们正在用一个方法将数字记录到日志中:

public void ExampleMethod(int number){
    try{
        int num = number
        ...open connection to file
        ...write number to file
    }
    catch(Exception ex){
        .... deal with exception (ex.message,ex.stacktrace etc...)
    }
    finally{
    ...close file connection
    }
}

有什么方法可以查看调用的方法(在本例中为 ExampleMethod)以及传递的可能导致方法调用崩溃的特定编号?我相信您或许可以将此记录在 catch block 中,但我主要对捕获导致系统抛出异常的方法调用和参数感兴趣。

有什么想法吗?

最佳答案

我建议将参数值填充到异常的 Data 字典中,例如

public void ExampleMethod(int number) {
try {
    int num = number
    ...open connection to file
    ...write number to file
}
catch(Exception ex) {
    ex.Data["number"] = number;
    //.... deal with exception (ex.message,ex.stacktrace etc...)
}
finally {
    //...close file connection
}

此方法的另一个优点是您可以将参数填充到 catch block 中,然后重新抛出异常并将其记录到其他地方而不会丢失堆栈跟踪,例如

catch(Exception ex) {
    ex.Data["number"] = number;
    throw;
}

关于c# - .NET 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109624/

相关文章:

java - SwingWorker 上的异常不可捕获

asp.net - 使用内部 SecurityException 抛出异常仅在 ASP.NET MVC 中显示内部异常

c# - 如何将 C .DLL 文件导入 C# Windows 窗体应用程序并调用其在 header 中定义的函数?

c# - ListView 的检查包含特定数字

c# - 异常堆栈跟踪中不包含行号(使用 Roslyn 动态编译的代码)

python - http.client.HTTPException : got more than 100 headers

c# - 需要一个也比较属性的 linq 连接

c# - WPF 列表框超出屏幕大小(MVVM 灯)

.net - 您在桌面应用程序中的 NHibernate session 管理策略是什么?

c# - 仅使用数学函数的规则向上/向下舍入?