从Visual Studio获取堆栈跟踪

时间:2014-02-12 17:55:22

标签: c# .net visual-studio-2012

我在Visual Studio 2012上有一个C#程序有错误。如何检索堆栈跟踪?

3 个答案:

答案 0 :(得分:3)

在调试时,堆栈跟踪可以作为“调用堆栈”窗口访问。如果您想要捕获的异常的堆栈跟踪,可以通过您捕获的异常的StackTrace成员访问它:

try
{
    [...]
}
catch (Exception ex)
{
    Console.Write(ex.StackTrace);
}

添加另一个有用的例子:

try
{
    [...]
}
catch (Exception ex)
{
    System.Diagnostics.Debug.Write(ex.StackTrace);
}

这将打印到Visual Studio调试控制台而不是应用程序的控制台窗口。

答案 1 :(得分:1)

如果您收到异常,可以通过调用同名成员获得StackTrace

答案 2 :(得分:1)

这是我用来获取详细信息的一些代码

if (e.Exception.InnerException != null)
{
    sb.AppendLine("InnerException");
    if (e.Exception.InnerException.Message == null)
    {
        sb.AppendLine("e.Exception.InnerException.Message == null");
    }
    else
    {
        sb.AppendLine("e.Exception.InnerException.Message = " + e.Exception.InnerException.Message);
    }
    if (!string.IsNullOrEmpty(e.Exception.InnerException.StackTrace))
    {
        sb.AppendLine("e.Exception.InnerException.StackTrace ");
        int count = 0;
        foreach (string line in e.Exception.InnerException.StackTrace.Split('\n'))
        {
            sb.AppendLine(line.Trim());
            count++;
            if (count > 10) break;
        }
    }
}
sb.AppendLine("OuterException");
if (e.Exception.Message == null)
{
    sb.AppendLine("e.Exception.Message == null");
}
else
{
    sb.AppendLine("e.Exception.Message = " + e.Exception.Message);
}
if (!string.IsNullOrEmpty(e.Exception.StackTrace))
{
    sb.AppendLine("e.Exception.StackTrace ");
    int count = 0;
    foreach (string line in e.Exception.StackTrace.Split('\n'))
    {
        sb.AppendLine(line.Trim());
        count++;
        if (count > 10) break;
    }
}