【问题标题】:C# equivalent to Python's traceback libraryC#相当于Python的回溯库
【发布时间】:2010-12-17 20:00:14
【问题描述】:

this post中,python有traceback库来获取一些详细的错误信息(行号,文件名...)。

C# 是否有类似的函数可以知道生成异常的文件/行号?

添加

我根据答案想出了以下代码。

using System;

// https://stackoverflow.com/questions/4474259/c-exception-handling-with-a-string-given-to-a-constructor

class WeekdayException : Exception {
    public WeekdayException(String wday) : base("Illegal weekday: " + wday) {}
}

class TryCatchFinally 
{
    public static void Main() 
    {
        try
        {
            throw new WeekdayException("thrown by try");
        }
        catch(WeekdayException weekdayException) {
            Console.WriteLine(weekdayException.Message);
            Console.WriteLine(weekdayException.StackTrace);
        }
    }
}

它给了我这样的信息:

Illegal weekday: thrown by try
  at TryCatchFinally.Main () [0x00000] in <filename unknown>:0 

【问题讨论】:

  • 标题的写法,听上去好像是在寻找相当于python中C#的库。
  • @Falmarri :感谢您指出。

标签: c# python exception-handling error-handling


【解决方案1】:

当你捕获一个异常时,你可以查看它的堆栈跟踪,这应该会给出类似的结果:

catch(Exception e)
{
    Console.WriteLine(e.StackTrace);
}

如果可以加载调试数据(如果 .pdb 文件与可执行文件在同一目录中/您在调试模式下构建),这将包括文件名行号。如果不是,它将仅包含方法名称。

【讨论】:

  • 是的,我可以使用 csc 获取行号,但不能使用 mono。我发布了另一个问题 - stackoverflow.com/questions/4474547/…
  • @prosseek:不幸的是,我对单声道了解不多,希望其他人能为您解答。
【解决方案2】:

当异常被抛出时,检查堆栈跟踪 - 它会给你相同的结果。

【讨论】:

    【解决方案3】:

    Exception 继承的所有类都有一个StackTrace 属性。它与 Python traceback 库不太一样,因为 C#/.NET 的运行方式(就像它没有与 tb_lineno 等效的一样)。它只是堆栈跟踪的字符串表示形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-28
      • 2011-06-25
      • 2010-12-21
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多