2014-02-12 115 views
0

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

+1

你说的意思是“找回”了吗?你想显示它?将其记录到文件?如果你目前没有任何代码来处理你的异常,你肯定会得到一些东西。或者你有一个空的'catch'块来吞噬异常?可能有助于发布一些代码。 –

+0

你的意思是在用户界面?调试,窗口,堆栈跟踪。但你必须首先有一个例外。 – Paparazzi

回答

3

调试时,堆栈跟踪可以作为“调用堆栈”窗口进行访问。如果你愿意,你捕获的异常的堆栈跟踪,它是通过异常的StackTrace会员,你抓到访问:

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

要添加其他有用的例子:

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

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

1

如果您收到一个例外,您可以通过调用相同名称的成员来获得StackTrace

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; 
    } 
}