我正在处理的程序具有一个名为“错误”的日志记录功能,用于在不使程序崩溃的情况下通知错误,但是,我希望包括堆栈跟踪,以便可以更轻松地调试这些非致命错误。我的第一个本能是使用System.Diagnostics.StackTrace,不幸的是在PCL中不可用。

然后,我尝试引发并立即捕获异常。

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

不幸的是,这仅提供了调用堆栈的顶部:由于它不会解开堆栈,因此无法提供任何有用的信息。因此,我的问题是:如何在C#PCL函数中获取堆栈跟踪,而不会引发错误并将其捕获在堆栈底部? 我希望将代码完全保留在PCL中,并避免使用琐碎的抽象和平台特定的实现代码。

作为对评论的回应进行编辑:`throw new Exception(ex)仅向堆栈跟踪添加另一层,因此它在堆栈跟踪函数中有两行,但仍无法检索完整的跟踪。

最佳答案

尝试使用Environment.StackTrace property



编辑:

版本说明似乎表明Environment class is supported by PCL:

关于与System.Diagnostics.StackTrace等效的C#可移植类库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27665830/

10-13 08:43