У меня были похожие проблемы с первоначальным выпуском ClrMD. Он не смог успешно загрузить MSCORDACWKS, который WinDbg с радостью принял, находился на пути, который я сделал доступным для ClrMD, и мог успешно использовать WinDbg для того же дампа. То же самое произошло с первоначальным выпуском DebugDiag v2, который, как я понимаю, основан на ClrMD. Я сделал тот же переименованный DAC, принятый WinDbg, доступным в пути символа DebugDiag, и DebugDiag прервал анализ; сообщение о том, что [предоставлено] «временная метка и размер mscordacwk.dlls не соответствуют тому, что в дампе»; даже несмотря на то, что попытка загрузки через ProcMon ясно показала, что он обращается к правильной DLL через имя, принятое WinDbg.
Однако, работая с нашей командой Microsoft над невозможностью DebugDiag v2 загрузить DAC, я смог заставить наш TAM также предоставить раннюю копию «исправленного» ClrMD, который был назван ClrMD 0.8.5, который решил эти проблемы для меня. Это альфа-сборка, и я не уполномочен распространять ее, но, по крайней мере, вы можете поискать эту версию или версию новее 0.8.5 в дикой природе.
И еще одно: при использовании соответствующего 32-битного или 64-битного WinDbg обычно можно обойтись всего двумя именованными вариантами MSCORDACWKS: одним для 64-битного и одним для 32-битного. Таким образом, для загрузки MSCORDACWKS для .Net 4.0.0319.1008 с другого компьютера, например, вы можете переименовать 64-разрядную версию целевого хоста дампа из C:\Windows\Microsoft.NET\Framework64 в mscordacwks_AMD64_AMD64_4.0.31319.1008.dll для 64-битное приложение и переименуйте 32-битную версию из C:\Windows\Microsoft.NET\Framework64 в mscordacwks_x86_x86_4.0.30319.1008.dll для 32-битного приложения и в значительной степени добьетесь успеха.
Однако есть еще одна проблема, связанная с ClrMD. Вы можете столкнуться с тем, что библиотека ClrMD попытается получить дополнительные именованные версии DAC в зависимости от разрядности, которую вы используете в качестве цели сборки для компиляции Visual Studio вашего приложения с использованием ClrMD.
Когда я по привычке создал свой первый тестовый комплект ClrMd для 64-битной целевой платформы, ClrMd искал библиотеку с именем mscordacwks_x86_amd64_4.0.30319.1008.dll вместо имени "...x86_x86...". Несмотря на то, что я запускал свою тестовую программу для 32-разрядного приложения, простое переименование ЦАП из одного из двух упомянутых выше переименований не сработало. (Я не говорю, что у меня не было чего-то не так, просто у меня это не сработало. У вас может быть другое мнение.)
Однако, как только я изменил цель сборки в VS2010 на 32-разрядную, «исправленная» версия 0.8.5 немедленно загрузила правильно переименованную DLL mscordacwks_x86_x86_4.0.30319.1008 без дальнейших проблем.
person
Bob Riddle
schedule
08.01.2014