【问题标题】:How to format Exception's stack trace in C#?如何在 C# 中格式化异常的堆栈跟踪?
【发布时间】:2011-01-23 06:02:36
【问题描述】:

当显示异常时(或更一般的 - 当它被转换为字符串时)显示堆栈跟踪。我想要做的是更改此类跟踪中显示的源代码文件路径的格式。

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

我该怎么做?

【问题讨论】:

    标签: c# exception-handling


    【解决方案1】:

    我问了一个类似的问题,虽然不完全一样,在这里: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有何不同?
    • Exception.StackTrace 是一个字符串,这是一个提供对堆栈跟踪部分的编程访问的类,包括文件名、行号、类名等,而不是单个字符串。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 2016-06-17
      • 2011-01-05
      • 2011-06-01
      • 2010-09-13
      • 2010-10-16
      相关资源
      最近更新 更多