抛出异常时从stacktrace和frame获取文件名

时间:2015-07-20 14:13:16

标签: c# stack-trace

我尝试在抛出异常时获取文件名和源代码编号。 但我一无所获。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            throw new InvalidOperationException();
        }
        catch (InvalidOperationException exception)
        {
            var stackTrace = new StackTrace(exception);
            var currentFrame = stackTrace.GetFrame(0);
            var fileName = currentFrame.GetFileName();
            var sourceLineNumber = currentFrame.GetFileLineNumber();
            Console.WriteLine("File Name: " + fileName);
            Console.WriteLine("Source line number: " + sourceLineNumber);
            Console.ReadKey();
        }
    }
}

只有一个框架可用。所以我使用GetFrame(index)中的索引0。

1 个答案:

答案 0 :(得分:2)

我会写一个方法并使用CallerFilePathCallerLineNumberCallerMemberName属性

public void Log([CallerFilePath]string path="",[CallerLineNumber]int lineNumber=0,[CallerMemberName] string memberName="")
{
    Console.WriteLine(path + " " + lineNumber + " " + memberName);
}

用法:Log()

更多信息:documentation