Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何打开C#崩溃转储(小型转储)_C#_Debugging_Windbg_Crash Dumps_Minidump - Fatal编程技术网

如何打开C#崩溃转储(小型转储)

如何打开C#崩溃转储(小型转储),c#,debugging,windbg,crash-dumps,minidump,C#,Debugging,Windbg,Crash Dumps,Minidump,我们的C#应用程序在出现未处理的异常时调用minidumpWriteMap 我从用户那里收到了一些崩溃转储,我似乎无法用SOS打开崩溃转储并查看导致崩溃的异常 我们采用的转储类型是MiniDumpWithPrivateReadWriteMemory 我已将我的_NT_SYMBOL_路径配置为使用MS public SYMBOL server,并且在WinDBG中调试此崩溃转储时,它会自动下载所需的DLL(因为此转储是在具有不同版本的.NET 2的计算机上进行的,即以.3053结尾的计算机) 跑步

我们的C#应用程序在出现未处理的异常时调用minidumpWriteMap

我从用户那里收到了一些崩溃转储,我似乎无法用SOS打开崩溃转储并查看导致崩溃的异常

我们采用的转储类型是MiniDumpWithPrivateReadWriteMemory

我已将我的_NT_SYMBOL_路径配置为使用MS public SYMBOL server,并且在WinDBG中调试此崩溃转储时,它会自动下载所需的DLL(因为此转储是在具有不同版本的.NET 2的计算机上进行的,即以.3053结尾的计算机)

跑步的时候!我将获得以下输出:

请求线程存储失败

我已经浏览了所有可能的站点,这些站点解释了处理不同版本CLR的技术,而不是转储机器中的版本,没有一个适合我

如何调试这些崩溃

我们是否做错了什么(从.NET进程中获取错误类型的转储,等等)

编辑:

以下是~*的结果:

0:000>~*。0 Id:1338.258暂停:0 Teb:7ffdf000未冻结 优先级:0 1 Id:1338.2a0暂停:0 Teb:7ffde000未冻结 优先级:0 2 Id:1338.1fd4挂起:0 Teb:7ffdd000 解冻 优先级:0 3 Id:1338.17e8挂起:0 Teb:7ffda000 解冻 优先级:0 4 Id:1338.1148挂起:0 Teb:7ffd9000 解冻 优先级:0 5 Id:1338.b1c暂停:0 Teb:7ffd7000未冻结 优先级:0 6 Id:1338.f94暂停:0 Teb:7ffd4000未冻结 优先级:0 7 Id:1338.11b4挂起:0 Teb:7ff4f000 解冻 优先级:0 8 Id:1338.1814挂起:0 Teb:7ff4e000 解冻 优先级:0 9 Id:1338.1cc4挂起:0 Teb:7ffdb000 解冻 优先级:0 10 Id:1338.1e48挂起:0 Teb:7ffd5000 解冻 优先级:0 11 Id:1338.1a5c挂起:0 Teb:7ff4c000 解冻 优先级:0 12 Id:1338.1874挂起:0 Teb:7ff4b000 解冻 优先级:0 13 Id:1338.1498挂起:0 Teb:7ff4a000 解冻 优先级:0

这是测试的结果!分析-v:


WinDbg可能加载了错误版本的mscorwks DLL。尝试使用.cordell-lp显式告诉WinDbg应该加载哪些CLR调试模块,另请参阅此博客帖子:

您需要更改传递给“minidumpWriteDomainp”的选项,确保它们包含此处提到的选项:

如果在Visual Studio中打开崩溃转储文件会发生什么情况?我们的应用程序使用.NET 3.5和VS2008,因此无法以这种方式打开(据我所知,仅启动.NET 4和VS2010)。不知道这是否是您的问题,但通常从崩溃的应用程序本身创建一个小型转储是(请参阅备注部分)。这很好,只有在另一个OS/.NET版本上发生的这些特定崩溃似乎给您带来了困难。从同一个进程获取它的替代方案是什么?@Christian从同一个进程获取进程转储可能会导致死锁,但一般来说,如果您成功创建了转储,那么您必须假设它可能没有问题。尝试了,没有帮助。我开始认为迷你转储类型可能是原因。我认为你是对的,MiniDumpWithPrivateReadWriteMemory可能不足以获取所需信息。我需要的信息是托管异常,可能是崩溃时的调用堆栈。你尝试过“!analyze-v”吗?这将为您提供有关异常的详细信息。只是好奇,“~*”给了你什么?它应该列出所有(本机)线程,然后您可以测试线程信息是否存在。好的,我认为好消息是您确实有关于正在运行的线程的信息,但我仍然认为加载的.net符号是错误的(请参阅“帧IP不在任何已知模块中。以下帧可能是错误的”在分析命令输出的调用堆栈中)。