debugging C#可移植类库System.Diagnostics.StackTrace的等效物

qlzsbp2j  于 2023-11-22  发布在  C#
关注(0)|答案(1)|浏览(154)

我正在编写的一个程序有一个名为“Error”的日志记录功能,可以在不使程序崩溃的情况下通知错误,但是,我想包含一个堆栈跟踪,以便更容易地调试这些非致命错误。我的第一个直觉是使用System.Diagnostics.StackTrace,不幸的是,PCL中没有。
然后,我尝试抛出并立即捕获异常。

try { throw new Exception(); } 
catch (Exception ex) { return ex.StackTrace; }

字符串
不幸的是,这只提供了调用堆栈的顶部:因为它不会在向下的过程中解开堆栈,所以它没有提供任何有用的信息。所以,我的问题是:**如何在c# PCL函数中获得堆栈跟踪,而不会抛出错误并在堆栈底部捕获它?**我更愿意将代码完全保存在PCL中,避免使用抽象和平台特定的实现代码来处理如此琐碎的事情。
编辑作为对注解的响应:`throw new Exception(ex)Only向堆栈跟踪添加了另一层,因此它在堆栈跟踪函数中有两行,但仍然无法检索完整的跟踪。

4si2a6ki

4si2a6ki1#

在某些PCL配置文件中,属性Environment.StackTrace是可用的,它在执行当前方法时获取调用堆栈上的帧的字符串表示。这是一种更简单的方法来获取堆栈跟踪,而不会引发异常。

像这样:

string stackTrace = Environment.StackTrace;

字符串
否则,您也可以手动添加Console.WriteLine(ex.StackTrace)或将其添加到记录器。

相关问题