2009-10-28 66 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

相关问题