C# 可移植类库等效于 System.Diagnostics.StackTrace

本文关键字:System Diagnostics StackTrace 可移植 类库 | 更新日期: 2023-09-27 18:35:34

我正在处理的程序有一个适当命名为"Error"的日志记录函数,可以在不使程序崩溃的情况下通知错误,但是,我想包含一个堆栈跟踪,以便可以更轻松地调试这些非致命错误。我的第一直觉是使用System.Diagnostics.StackTrace,不幸的是,PCL中没有。

然后,我试图抛出并迅速抓住一个异常。

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

不幸的是,这只提供了调用堆栈的顶部:因为它不会在向下的过程中解开堆栈,所以它不提供任何有用的信息。因此,我的问题是:如何在 c# PCL 函数中获取堆栈跟踪而不会引发错误并在堆栈底部捕获它?我宁愿将代码完全保留在 PCL 中,避免将抽象和特定于平台的实现代码用于如此微不足道的事情。

编辑作为对评论的响应:"抛出新的异常(例如)仅向堆栈跟踪添加另一层,因此它在堆栈跟踪函数中有两行,但仍然无法检索完整的跟踪。

C# 可移植类库等效于 System.Diagnostics.StackTrace

尝试使用 Environment.StackTrace 属性。

属性按时间倒序列出方法调用 顺序,即首先描述最新的方法调用,并且 为每个方法调用列出一行堆栈跟踪信息 堆栈。但是,StackTrace 属性可能不会报告那么多 由于在 优化。

编辑:

版本描述似乎表明 PCL 支持环境类:

版本信息 .NET 框架 支持: 4.6, 4.5, 4, 3.5, 3.0、2.0、1.1、1.0 .NET Framework 客户端配置文件支持:4、3.5 SP1 可移植类库 支持:可移植类库 .NET 适用于 Windows 应用商店应用 支持:Windows 8 支持:Windows 电话 8.1 支持: Windows Phone Silverlight 8.1 支持: Windows Phone Silverlight 8