2013-06-24 64 views
2

我用Microsoft.Diagnostics.Runtime,并尝试分析崩溃转储,但我没有在我的机器上匹配mscordacwks.dllMicrosoft.Diagnostics.Runtime:如何阅读崩溃转储?

请给我一个建议,做什么或怎样才能得到它从微软的符号服务器?

+0

也许这可以帮助你:[如何调试:w3wp.exe进程被终止,由于堆栈溢出(适用于一台机器,但不是另一台)](http://stackoverflow.com/questions/5053708/how-到调试W3WP-EXE-过程被终止 - 由于到一个堆栈溢出,作品上/ 13300623#13300623) –

+0

不幸的是,没有。我不想用WinDb,并尝试使用MSFT库Microsoft.Diagnostics.Runtime – burusera

+0

你找到任何答案吗? –

回答

0

缺少mscordacwks.dll是我不时遇到的一个问题,我不时遇到使用WinDbg查看故障转储文件(我注意到您正在尝试使用ClrMD来实现相同的最终目标)。通常情况下,微软符号服务器是非常全面的,但在mscordacwks.dll的情况下,公共符号服务器上不存在的所有版本(如描述here)。获取匹配的mscordacwks.dll版本的最好方法是将其从创建故障转储的机器(以及相应的.net框架文件夹)中提取,如果公共符号服务器出现故障。

老实说,我更多的WinDbg的用户,所以我更习惯于用mscordacwks处理存在,但对谷歌四处寻找我确实发现了几个有趣的文章。第一个提到的,你可以这样做:

// 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版本中加载。

0

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