获取C#app在非开发计算机上崩溃的堆栈跟踪

时间:2012-06-19 14:15:15

标签: c# debugging clr windbg

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

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

  

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

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

我希望看到异常消息和堆栈跟踪,以便我可以诊断问题。

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

(如果您的回答涉及windbg,请详细说明我已经尝试过的详细分步说明,并且在此方法中失败。)

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

3 个答案:

答案 0 :(得分:3)

如果您无权访问源代码,那么您就遇到了问题。例外应该在Windows事件中完成。也许异常被压制了。

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

  • ex.message
  • ex.InnerException.Message
  • ex.StackTrace

代码

        try
        {
            //Your code
        }
        catch (Exception ex)
        {
            //Log info to a file in same directory
        }

答案 1 :(得分:3)

  • 您可以通过向以下事件添加处理程序来在代码中的一个位置捕获未处理的异常。然后,您可以记录或执行其他操作。

    AppDomain.UnhandledException

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

答案 2 :(得分: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