我正在编写的一个程序有一个名为“Error”的日志记录功能,可以在不使程序崩溃的情况下通知错误,但是,我想包含一个堆栈跟踪,以便更容易地调试这些非致命错误。我的第一个直觉是使用System.Diagnostics.StackTrace
,不幸的是,PCL中没有。
然后,我尝试抛出并立即捕获异常。
try { throw new Exception(); }
catch (Exception ex) { return ex.StackTrace; }
字符串
不幸的是,这只提供了调用堆栈的顶部:因为它不会在向下的过程中解开堆栈,所以它没有提供任何有用的信息。所以,我的问题是:**如何在c# PCL函数中获得堆栈跟踪,而不会抛出错误并在堆栈底部捕获它?**我更愿意将代码完全保存在PCL中,避免使用抽象和平台特定的实现代码来处理如此琐碎的事情。
编辑作为对注解的响应:`throw new Exception(ex)Only向堆栈跟踪添加了另一层,因此它在堆栈跟踪函数中有两行,但仍然无法检索完整的跟踪。
1条答案
按热度按时间4si2a6ki1#
在某些
PCL
配置文件中,属性Environment.StackTrace
是可用的,它在执行当前方法时获取调用堆栈上的帧的字符串表示。这是一种更简单的方法来获取堆栈跟踪,而不会引发异常。像这样:
字符串
否则,您也可以手动添加
Console.WriteLine(ex.StackTrace)
或将其添加到记录器。