C#Portable Class Library等效于System.Diagnostics.StackTrace

Col*_*ome 11 c# debugging portable-class-library

我正在处理的程序有一个适当命名为"Error"的日志记录功能,用于通知错误而不会导致程序崩溃,但是,我想包含一个堆栈跟踪,以便更容易调试这些非致命错误.我的第一直觉是使用System.Diagnostics.StackTrace,遗憾的是PCL没有.

然后,我试图抛出并立即捕获异常.

try { throw new Exception(); } 
catch (Exception ex) { return ex.StackTrace; }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只提供了调用堆栈的顶层:因为它没有解开堆栈,所以它不提供任何有用的信息.所以,我的问题是:如何在ac#PCL函数中获得堆栈跟踪而不会抛出错误并将其捕获到堆栈的底部?我更愿意将代码完全保留在PCL中,并避免使用抽象和平台特定的实现代码来实现这么简单的事情.

编辑为对注释的响应:`throw new Exception(ex)仅向堆栈跟踪添加另一个层,因此它在堆栈跟踪功能中有两行但仍无法检索完整跟踪.

Azt*_*des 0

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

像这样得到它:

string stackTrace = Environment.StackTrace;
Run Code Online (Sandbox Code Playgroud)

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