如何在我的 C# 应用程序中获得完整的堆栈跟踪?

问题描述 投票:0回答:1

我意识到现在我的应用程序中的异常堆栈跟踪很短。

例如我有一个简单的应用程序:

private static void Main(string[] args)
{
    var downloader = new DataDownloader("");
}
 
internal class DataDownloader
{
    public DataDownloader(string template)
    {
        this._urlTemplate = template;
        var manager = new FileManager();
        manager.MoveFileSync();
    }
}

public class FileManager
{
    public FileManager() 
    { 
    }

    public int MoveFileSync()
    {
        try
        {
            throw new ArgumentException();
        }
        catch (Exception ex)
        {
        }

        return 0;
    }
}

在 catch 中我得到了简单的 StackTrace

如何获取从

Main
入口点开始的完整堆栈跟踪?

c# console
1个回答
0
投票

TBH 不确定为什么会发生这种情况,但您可以手动构造

StackTrace
的实例并使用它:

try
{
    throw new ArgumentException();
}
catch (Exception ex)
{
    StackTrace st = new StackTrace(true);
    Console.WriteLine(ex.StackTrace);
    Console.WriteLine("....");
    Console.WriteLine(st);
}

演示@sharplab.io

来自

Exception.StackTrace
文档:

StackTrace
属性返回源自引发异常的位置的调用堆栈帧。您可以通过创建
System.Diagnostics.StackTrace
类的新实例并使用其
StackTrace.ToString
方法来获取有关调用堆栈中其他帧的信息。

© www.soinside.com 2019 - 2024. All rights reserved.