我们偶尔会在进程退出时收到 dr watson 崩溃对话框。该过程是.NET 2.0。该对话框不是很有帮助。它说进程停止工作,在细节中我可以看到它是关于 System.NullReferenceException 的,很好但是回溯在哪里?
通常,当 .net 进程出现错误时,会将回溯打印到标准错误。但不是在这种情况下,可能是因为进程退出。出现此对话框时,谁能给我指点如何获取有关崩溃原因的更多信息?
我倾向于在开发机器上禁用 Dr Watson,并使用 Visual Studio 作为即时调试器,当应用程序爆炸时会启动它。我发现这种方式在根本原因分析方面更有用,特别是如果您有可用的调试信息。
使用 WinDBG 附加。异常很可能是在非托管代码中引发的。
如果崩溃是可重现的,那么在关闭应用程序之前,可能值得将调试器设置为在所有异常(可能包括本机和 CLR)上中断。通常崩溃可能是由于较早的错误导致的,因此这可能会为您提供线索。
您查看过 Watson 博士的转储文件吗?这些通常应该至少告诉您是哪个模块导致了问题。如果您正在处理本机代码,您将能够将 Dr Watson 提供的 minidump 文件加载到 Visual Studio 中,并在该机器上提供调试符号文件和源代码,您将能够在以下位置查看应用程序的状态崩溃的时间,有问题的线程的调用堆栈,以及导致崩溃的代码行。我不知道托管代码会发生什么,但可能值得一试。
此链接应为您提供有关分析小型转储文件的更多信息 Link to CodeProject
I use DILE to debug applications on production servers.
Dotnet IL Editor (DILE) allows disassembling and debugging .NET 1.0/1.1/2.0/3.0/3.5 applications without source code or .pdb files. It can debug even itself or the assemblies of the .NET Framework on IL level.
It has saved my life multiple times where applications would crash and no more information was available. It has a high learning curve though, but worth knowing about for those situations where you don't have access to Visual Studio or other tools.
I believe the newer versions can also read dump files.