捕获 Catch 块内异常的完整堆栈跟踪的最佳方法

cs98

我有一个用例,每当发生任何异常时,我都需要记录包含所有详细信息和行号的完整堆栈跟踪。我看到我可以在这里使用两种方法Exception.ToString()Exception.Stacktrace但我很困惑我应该使用哪一种?

另外,我看到很多 StackOverflow帖子和这篇文章,人们在谈论使用Ben.Demystifier库或其他方式。

catch (Exception ex)
{
    Console.WriteLine(ex.Stacktrace);
    Console.WriteLine(ex.ToString());
    // using Ben.Demystifier library
    Console.WriteLine(ex.ToStringDemystified());
}

我只是想了解我们可以用来记录异常的完整堆栈跟踪的最佳和推荐方法是什么?

科林

例外?使用 Exception.StackTrace。

然而,要注意的问题是,如果开发人员犯了这样的错误,一些堆栈跟踪信息可能会丢失:

try{ /* something errors */ }
catch(Exception ex)
{
    //do stuff
    throw ex;
}

...而不是重新抛出异常的适当方法:

try{ /* something errors */ }
catch(Exception ex)
{
    //do stuff
    throw; // <- no "ex"
}

前者只会记录从抛出点开始的堆栈跟踪。后者保留原始异常的堆栈跟踪。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章