我正在开发的一个程序有一个名为“错误”的日志记录功能,可以在不使程序崩溃的情况下通知错误,但是,我想包含一个堆栈跟踪,以便更容易地调试这些非致命错误。我的第一直觉是使用System. Diagnostics.StackTrace
,不幸的是,PCL中没有这种功能。
然后,我试图抛出并及时捕获一个异常。
try { throw new Exception(); }
catch (Exception ex) { return ex.StackTrace; }
不幸的是,这只提供了调用堆栈的顶部:因为它不会在向下的过程中分解堆栈,所以它不提供任何有用的信息。所以,我的问题是:如何在c#PCL函数中获取堆栈跟踪,而不会抛出错误并在堆栈底部捕获它?我更愿意将代码完全保留在PCL中,并避免对如此琐碎的事情使用抽象和平台特定的实现代码。
编辑作为对注释的响应:'抛出新异常(ex)仅向堆栈跟踪添加另一层,因此它在堆栈跟踪函数中有两行,但仍无法检索完整跟踪。
尝试使用环境. StackTrace属性。
StackTrace属性按时间倒序列出方法调用,即首先描述最近的方法调用,并为堆栈上的每个方法调用列出一行堆栈跟踪信息。但是,由于优化过程中发生的代码转换,StackTrace属性可能不会报告预期的那么多方法调用。
编辑:
版本描述似乎说明PCL支持环境类:
版本信息。NET框架支持于:4.6,4.5,4,3.5,3.0,2.0,1.1,1.0。NET框架客户端配置文件支持于:4,3.5 SP1可移植类库支持于:可移植类库。Windows应用商店应用NET支持于:Windows 8支持于:Windows Phone 8.1支持于:Windows Phone Silverlight 8.1支持于:Windows Phone Silverlight 8