我正在处理的程序具有一个名为“错误”的日志记录功能,用于在不使程序崩溃的情况下通知错误,但是,我希望包括堆栈跟踪,以便可以更轻松地调试这些非致命错误。我的第一个本能是使用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/