繁体   English   中英

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

[英]C# Portable Class Library Equivalent of System.Diagnostics.StackTrace

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

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

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

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

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

尝试使用Environment.StackTrace属性

StackTrace属性按反向时间顺序列出方法调用,即首先描述最近的方法调用,并为堆栈上的每个方法调用列出一行堆栈跟踪信息。 但是,由于优化期间发生的代码转换,StackTrace属性可能不会报告与预期一样多的方法调用。

编辑:

版本描述似乎表明PCL支持Environment类

版本信息.NET Framework受以下版本支持:4.6,4.5,4,3.5,3.0,2.0,1.1,1.0 .NET Framework Client Profile受以下版本支持:4,3.5 SP1可移植类库受以下版本支持:可移植类库.NET for Windows商店应用程序受以下版本支持:Windows 8受以下版本支持:Windows Phone 8.1受以下版本支持:Windows Phone Silverlight 8.1受以下版本支持:Windows Phone Silverlight 8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM