C# 中 Python traceback 库的等价物
在这篇帖子中,提到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
3 个回答
1
所有从 Exception
这个类继承的类都有一个 StackTrace
属性。这个属性和 Python 的 traceback
库不完全一样,因为 C#/.NET 的运行方式不同(比如它没有类似于 tb_lineno
的东西)。简单来说,它就是堆栈跟踪的字符串表示。
1
当出现错误时,可以查看堆栈跟踪信息——它会给你提供相同的结果。
4
当你捕捉到一个异常时,你可以查看它的堆栈跟踪,这个跟踪信息应该会给你类似的结果:
catch(Exception e)
{
Console.WriteLine(e.StackTrace);
}
如果可以加载调试数据(也就是说,.pdb文件和可执行文件在同一个文件夹里,或者你是以调试模式构建的),那么这个信息会包含文件名和行号。如果不能加载调试数据,它只会显示方法名。