如何在C#中格式化Exception的堆栈跟踪?

显示exception时(或更常见 – 当它转换为String时)显示堆栈跟踪。 我想要做的是更改此类跟踪中显示的源代码文件路径的格式。

具体来说,我想只保留文件名(没有完整路径)或仅显示以项目基本目录开头的路径部分。 通常不需要完整路径并使整个消息混乱。

我怎样才能做到这一点?

我问了一个类似的问题,虽然不完全相同,但是: 在C#中打印堆栈跟踪信息 。

你能做的是:

var trace = new System.Diagnostics.StackTrace(exception); 

它为您提供了一个StackTrace对象,为您提供所需的所有信息。 在我的情况下,它是关于避免必须处理本地化的exception文本,但我想你可以使用相同的方法来满足您的需求。


编辑 :我注意到我已经对我的问题的接受答案添加了注释,该问题与构造函数的“needFileInfo”参数有关。 我在这里看到这个构造函数: StackTrace(Exception e,bool fNeedFileInfo) ,我现在无法找到有问题的实际代码,但我猜你需要将true传递给该参数。 我想实验是关键。

换句话说,我猜代码应该是这样的:

 var trace = new System.Diagnostics.StackTrace(exception, true); 

查看System.Diagnostics.StackFrame类和GetFileName方法。 您可以编写一个方法来获取堆栈跟踪以及可以在exception处理程序中调用的源文件的名称。