如何在客户端计算机上运行时查看应用程序的异常?

时间:2010-10-30 23:51:40

标签: c# .net winforms

我安装了Windows Forms .NET 3.5应用程序并正确安装。尝试运行它时,应用程序崩溃,并显示典型的Microsoft Windows错误对话框。您知道要求您发送错误报告的那个。

我的问题是,如何才能看到实际导致程序无法启动的原因?

应用程序在我的开发机器上运行良好,问题是在安装时使用我创建的安装文件在另一台计算机上运行。

有没有办法在不在开发机器上运行时看到'innerException'?

3 个答案:

答案 0 :(得分:2)

除了检查Windows事件查看器(来自计算机管理)之外,您还可以尝试在程序周围构建一些错误记录。如果您扩展Main()方法以包含以下行,您将能够获得有关程序失败原因的更多信息:

[STAThread]
static void Main()
{
    Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    Application.Run(new Form1());
}

private static void Application_ThreadException(
        object sender, ThreadExceptionEventArgs e)
{
    //Log error here using e.Exception
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    //Log error here using (Exception)e.ExceptionObjecte.Exception
}

您可以使用StreamWriter

将错误记录到简单的文本文件中
string dateStr = DateTime.Now.ToString("yyyy-MM-dd");
StreamWriter sw = File.AppendText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ErrorLog_" + dateStr + ".log"));
sw.WriteLine(exception);

答案 1 :(得分:1)

这些是您拥有的默认选项:

  1. (如果可能)更改应用程序,以便它记录错误和警告,使用例如log4net或Windows事件日志,然后重新分发您的应用程序。
  2. 如果无法使用第一个选项,则必须检查更高级的调试:客户端计算机上的运行时调试。一种方法是将WinDbg与.NET扩展(SOS)或Debugging Tools for Windows中的相关工具一起使用。您可以在客户端计算机上进行设置而无需运行安装程序,因此它应该具有很少或没有副作用(与非设置Visual Studio的选项相反)。有一篇文章是here,他们正在调试崩溃转储文件。 Here是关于该主题的另一篇文章。你会在谷歌搜索上找到无穷无尽的资源 - 主题并不简单,但我建议你研究一下。
  3. (如果您现在需要结果,并且没有时间深入研究WinDbg和相关工具的高级调试,我只想在应用程序中添加一些跟踪。)

答案 2 :(得分:0)

你检查了EventLog吗?如果您的程序启动,然后开始崩溃。把EventLog.WriteEntry(exceptionMessage)。如果没有,最好的方法是看看它是EventLog。