2014-02-12 113 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; 
    } 
}