4

我在未安装 Visual Studio 的客户端计算机上安装了 C# windows 窗体应用程序。

当应用程序运行时,它会立即崩溃并显示一个对话框

ProgramX 已停止工作。一个问题导致程序停止正常工作。请关闭程序。”

对话框上唯一的按钮是“关闭程序”。

我想查看异常消息和堆栈跟踪,以便诊断问题。

我尝试安装“windbg”附带的.Net SDK。我已经在 windbg 中运行了该程序,并设法让它说出“CLR 异常”。但是,我无法让 windbg 打印异常消息或堆栈跟踪。由于 DLL 加载消息,即使经过大量摆弄,它也不会加载 SOS 或 PSSCOR2。一定有更简单的方法!

(如果您的答案涉及windbg,请提供详细的分步说明,因为我已经尝试过这种方法但失败了。)

该应用程序是一个 .Net 3.5 应用程序。该机器安装了 .Net 3.5 和 .Net 4。事件日志中没有任何内容(我可以找到)。

4

3 回答 3

4

如果您无权访问源代码,那么您就有问题了。异常应该在 Windows 事件中结束。也许异常被抑制了。

如果您确实有权访问源代码,则可以使用 TRY\CATCH 和 CATCH 包围起始代码并将异常信息打印到文件中:

  • 留言
  • ex.InnerException.Message
  • ex.StackTrace

代码

        try
        {
            //Your code
        }
        catch (Exception ex)
        {
            //Log info to a file in same directory
        }
于 2012-06-19T14:19:58.267 回答
3
  • 通过将处理程序添加到以下事件,您可以在代码中的一处捕获未处理的异常。然后,您可以记录或执行一些其他操作。

    AppDomain.UnhandledException

  • 您可以从任务管理器生成故障转储(右键单击Processes选项卡中的条目并选择Create Dump File)并使用 WinDbg 加载它。运行该!pe命令应显示异常。您将需要构建中的 PDB 文件和崩溃机器中正确版本的 SOS DLL。

于 2012-06-21T21:09:22.177 回答
2

使用 ADPlus 获取应用程序的故障转储,并将故障转储加载到开发计算机上的 WinDbg 中:

http://blogs.msdn.com/b/webdav_101/archive/2008/09/04/howto-generating-a-crash-dump-with-adplus.aspx

http://support.microsoft.com/kb/286350

您也可以尝试设置远程调试(假设您有源代码):

http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx

于 2012-06-19T14:25:42.537 回答