c# - 抛出异常时从堆栈跟踪和帧中获取文件名

标签 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。

最佳答案

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

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

用法:Log()

了解更多信息:https://msdn.microsoft.com/en-us/library/hh534540.aspx

关于c# - 抛出异常时从堆栈跟踪和帧中获取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31518803/

相关文章:

c# - Wix:CustomAction 中二进制文件的路径

c# - 尝试在 UWP 中初始化 InkCanvas 数组时内存不足,无法继续执行程序

javascript - Firebug:Angular 堆栈跟踪不显示错误源(行号、文件)

java - 抛出异常以使堆栈跟踪不包含某些类类型

java - 如何正确编辑图库中的位图?

c# - 为什么 "my,string".Split (',' ) 在 .NET C# 中有效

c# - Selenium - 如何隐藏浏览器

c# - 计算文本文件中特定单词的频率

ruby - 在 Rails 控制台中启用异常堆栈转储

python - 异常堆栈跟踪中的 locals() 和 globals() (Python)