Microsoft.Diagnostics.Runtime:如何读取崩溃转储?

时间:2013-06-24 18:46:07

标签: c# windows-runtime

我使用Microsoft.Diagnostics.Runtime并尝试分析崩溃转储,但我的计算机上没有匹配的 mscordacwks.dll

请给我一个建议,告诉我该做什么或如何从微软的符号服务器上获取它?

2 个答案:

答案 0 :(得分:0)

缺少mscordacwks.dll是我不时遇到的痛苦,使用WinDbg查看崩溃转储文件(我注意到您正在尝试使用ClrMD来实现相同的最终目标)。通常,微软符号服务器非常全面,但在mscordacwks.dll的情况下,公共符号服务器上并不存在所有版本(如here所述)。获取匹配的mscordacwks.dll版本的最佳方法是从公共符号服务器失败的创建故障转储的计算机(和相应的.net框架文件夹)中提取它。

老实说,我更像是WinDbg用户,所以我更习惯于在那里处理mscordacwks,但是从google上看,我确实找到了几篇有趣的文章。首先提到你可以这样做:

// DataTarget.ClrVersions lists the versions of CLR loaded in the process (this may be
// v2 and v4 in the Side-By-Side case.
ClrInfo version = target.ClrVersions[0];

// CLRVersionInfo contains information on the correct Dac dll to load.  This includes
// the long named dac, the version of clr, etc.  This is enough information to request
// the dac from the symbol server (though we do not provide an API to do this).  Also,
// if the version you are debugging is actually installed on your machine, DacLocation
// will contain the full path to the dac.
string dacLocation = version.TryGetDacLocation();

如果这不起作用,则会有人为DacLocator类发布更复杂的代码。希望这两个途径中的一个应该用于加载您需要的dll版本。

答案 1 :(得分:0)

现在ClrVersion类上有一个TryDownloadDac方法。您需要在运行您正在调试的应用程序(64位/ 32位)的相同架构中运行您的流程,以便成功将DAC库加载到您的流程中。