2009-10-28 101 views
3

我在生產中有一個.NET Windows應用程序,它無法訪問Visual Studio(標準版),它們唯一可以安裝的版本是Express版本,該版本沒有即時調試(Just-In-Time Debugging)選項(在崩潰時具有調試按鈕的選項)。所以我只是想知道是否有Windows應用程序調試工具或其他我可以運行或附加以查看堆棧跟蹤的工具。我還在我的應用程序中啓用了PDB,但它沒有提供任何更多信息,所以我可以跟蹤我的崩潰(由未處理的異常引起)。如何查看.NET應用程序的堆棧跟蹤

回答

3

您還可以使用WinDbg和sos.dll

+1

即使是中級開發人員也很難。也許他們可以使用DebugDiag或其他工具來生成崩潰轉儲並使用WinDbg進行分析。然後,一個簡單的「分析-v」足以打印出異常信息。 – 2009-10-29 02:30:18

+0

是否可以從Windbg生成行號?因爲我可以獲取方法名稱,但不能獲得行號。 – paradisonoir 2009-10-29 16:46:33

+0

只有當你有符號時,我才認爲它也必須以調試模式構建。 – 2009-10-29 21:47:02

1

你可以嘗試CLR Profiler

+0

它是否爲Stacktrace的內容提供了一個很好的輸出?像班級和行號,導致我的崩潰是未經處理的。 – paradisonoir 2009-10-28 21:43:48

+0

@paradisonoir:Fyi,行號只有在您擁有程序集的pdb時纔可用。否則,您只需獲取堆棧位置和方法名稱。 – eduncan911 2009-10-28 22:45:06

+0

+1提到一個解決OP問題的自由分析器,即顯示堆棧跟蹤。爲了記錄,這裏是CLR Profiler 2.0的鏈接:http://tinyurl.com/ClrProfiler2 – galaktor 2010-06-17 08:20:57

0

也許EQATEC Tracer可以幫助你。

+0

我用它開始了我的應用程序,但它在崩潰發生後沒有任何我的堆棧跟蹤輸出。 – paradisonoir 2009-10-29 16:45:52

+0

該鏈接現在已損壞。 – 2013-01-25 09:49:03

6

如果捕捉異常,則Exception對象包含堆棧跟蹤:Exception.StackTrace。另外,您可以通過Environment.StackTrace訪問它。

在下面的代碼中,還有一個未處理的異常的事件處理程序,它會將異常(包括堆棧跟蹤)寫入事件日誌。

// Sample for the Environment.StackTrace property 
using System; 

class Sample 
{ 
    public static void Main() 
    { 
     AppDomain.CurrentDomain.UnhandledException += 
      new UnhandledExceptionEventHandler(UnhandledExceptions); 

     Console.WriteLine("StackTrace: '{0}'", Environment.StackTrace); 
     throw new Exception("Fatal Error"); 
    } 

    static void UnhandledExceptions(object sender, UnhandledExceptionEventArgs e) 
    { 
     string source = "SOTest"; 
     if (!System.Diagnostics.EventLog.SourceExists(source)) 
     { 
      System.Diagnostics.EventLog.CreateEventSource(source, "Application"); 
     } 

     System.Diagnostics.EventLog log = new System.Diagnostics.EventLog(); 
     log.Source = source; 

     log.WriteEntry(e.ExceptionObject.ToString(), 
         System.Diagnostics.EventLogEntryType.Error); 
    } 
+0

所以我可以打印出一些無顯着的異常呢? – paradisonoir 2009-10-28 21:43:12

+0

是的。您可以使用日誌框架將它們寫入錯誤日誌。 – 2009-10-29 02:39:59

+0

@paradisonoir - 我添加了一個未處理的異常事件處理程序,它將日誌(包括堆棧跟蹤)寫入事件日誌。 – 2009-10-29 04:14:24

1

.NET應用程序異常的堆棧跟蹤會記錄在「應用程序」下的「事件查看器」中。

alt text http://eduncan911.com/blog/thumbnail/exception-in-iis-stackoverflow-logs.png

+0

我想你會發現他們只會在這裏結束,如果你自己登錄他們,當拋出異常! – 2009-10-28 21:29:45

+0

我在我的應用程序中遇到了異常情況,我不會在此處顯示。 – eduncan911 2009-10-28 21:30:40

+0

我的ASP.net應用程序還會自動將未處理的異常記錄到事件日誌中。無需代碼。 – pyrocumulus 2009-10-28 21:32:07

0

用途:

.NET Framework 2.0 SDK隨附Microsoft CLR調試器。它的工作方式類似於Visual Studio調試器(儘管源文件是隻讀的),因此您可以嘗試一下。

+0

您也可以將全局異常處理程序添加到您的應用程序中。 http://blogs.msdn.com/lexli/archive/2009/04/28/how-to-handle-net-unhandled-exceptions-gracefully.aspx – 2009-10-29 02:34:09

相關問題