【问题标题】:Is it possible to extract some structured information from the Exception.StackTrace?是否可以从 Exception.StackTrace 中提取一些结构化信息?
【发布时间】:2009-11-21 21:10:23
【问题描述】:

我想知道是否可以将异常中的字符串 StackTrace 转换为更结构化的数据对象?

或者有没有一种方法可以在我捕获异常时获取此信息? 也许使用反射的东西?

谢谢!

【问题讨论】:

    标签: c# exception stack-trace


    【解决方案1】:

    查看System.Diagnostics.StackTrace 课程。您可以创建对象并遍历框架。

    StackTrace st = new StackTrace();
    foreach (var frame in st.GetFrames())
    {
        Console.WriteLine(frame.GetFileName().ToString()
            + ":"
            + frame.GetFileLineNumber().ToString());
    }
    

    【讨论】:

    • 这是一个非常方便的课程。如果您想确定调用您的方法,并且该方法上定义了任何自定义属性,那么您需要这个类。
    • 好吧,我发现你可以将异常对象传递给 StackTrace() 的构造函数。基本上就是这样:)
    • @Karim:这是更简单的方法:)
    • 问题是我将这个异常对象发送到一个处理异常日志的函数。所以如果我创建一个 StackTrace() ,它会给我当前的堆栈跟踪,而不是与异常关联的那个
    • 您确定是从异常中创建的吗?这似乎对我有用。
    【解决方案2】:

    StackTrace 类与接受Exception 的构造函数一起使用:

    static void ShowExceptionStackTrace(Exception ex)
    {
        var stackTrace = new StackTrace(ex, true);
    
        foreach (var frame in stackTrace.GetFrames())
            Console.WriteLine(frame.GetMethod().Name);
    }
    

    【讨论】:

      【解决方案3】:

      本质上,如果您想要一个一致的解决方案,那么您就不走运了。

      您可以通过存储stack trace on exception construction 获得大杂烩解决方案。

      但是,框架中没有在抛出异常时调用的钩子。

      【讨论】:

        猜你喜欢
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多