System.Diagnostics.StackTrace 的 C# 可移植类库等效项

问题描述 投票:0回答:1

我正在开发的一个程序有一个名为“Error”的日志记录函数,用于通知错误而不会使程序崩溃,但是,我想包含一个堆栈跟踪,以便可以更轻松地调试这些非致命错误。我的第一反应是使用

System.Diagnostics.StackTrace
,遗憾的是 PCL 中不提供该功能。

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

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

不幸的是,这仅提供了调用堆栈的顶部:因为它不会在向下的过程中解开堆栈,所以它不会提供任何有用的信息。所以,我的问题是这样的:如何在 c# PCL 函数中获取堆栈跟踪而不抛出错误并在堆栈底部捕获它?我更愿意将代码完全保留在 PCL 中并避免使用抽象以及平台特定的实现代码,用于如此琐碎的事情。

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

c# debugging portable-class-library
1个回答
0
投票

在某些

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

像这样得到它:

string stackTrace = Environment.StackTrace;

否则,您也可以手动添加

Console.WriteLine(ex.StackTrace)
或将其添加到记录器。

© www.soinside.com 2019 - 2024. All rights reserved.