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

时间:2010-03-03 14:47:53

标签: c# exception-handling

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

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

我该怎么做?

2 个答案:

答案 0 :(得分:24)

我问了一个类似的问题,虽然不完全一样,但是:Print stack trace information in C#

你可以做的是:

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

它会为您提供一个StackTrace对象,为您提供所需的所有信息。就我而言,它是关于避免处理本地化的异常文本,但我想你可以使用相同的方法来满足你的需求。


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

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

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

答案 1 :(得分:2)

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