【发布时间】:2011-01-23 06:02:36
【问题描述】:
当显示异常时(或更一般的 - 当它被转换为字符串时)显示堆栈跟踪。我想要做的是更改此类跟踪中显示的源代码文件路径的格式。
具体来说,我想只保留文件名(没有完整路径)或只显示以项目的基本目录开头的那部分路径。完整路径通常是不必要的,并且会使整个消息混乱。
我该怎么做?
【问题讨论】:
标签: c# exception-handling
当显示异常时(或更一般的 - 当它被转换为字符串时)显示堆栈跟踪。我想要做的是更改此类跟踪中显示的源代码文件路径的格式。
具体来说,我想只保留文件名(没有完整路径)或只显示以项目的基本目录开头的那部分路径。完整路径通常是不必要的,并且会使整个消息混乱。
我该怎么做?
【问题讨论】:
标签: c# exception-handling
我问了一个类似的问题,虽然不完全一样,在这里: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);
【讨论】:
exception.StackTrace有何不同?
查看 System.Diagnostics.StackFrame 类和GetFileName 方法。您可以编写一个方法来获取堆栈跟踪以及您可以在异常处理程序中调用的源文件的名称。
【讨论】: