Можно ли отладить системные .NET DLL как неоптимизированные? - PullRequest
8 голосов
/ 20 февраля 2010

Я пытаюсь отладить некоторый код в .NET Framework. К сожалению, многие переменные оптимизированы, и я не могу надежно установить указатель инструкций из-за оптимизации потока.

Можно ли принудительно заставить среду выполнения НЕ использовать ngen-версии системных библиотек DLL .NET, но вместо этого использовать MSIL, заставляя оптимизацию выключаться?

Примечание: я пытался использовать трюк INI, чтобы установить AllowOptimize = false, но это не имело никакого значения.

Ответы [ 3 ]

11 голосов
/ 22 ноября 2012

Вот еще один вариант (из http://martin.bz/asp-net-mvc-source-debugging-the-easy-way):

Перейдите в каталог, где находится System.Web.Mvc .dll:

C: \ Windows \ сборка \ GAC_MSIL \ System.Web.Mvc \ 2.0.0.0__31bf3856ad364e35 \

Создать файл System.Web.Mvc.ini

[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0

В следующий раз, когда вы войдете в исходный код MVC, вы сможете проверить все переменные.

Подробнее на http://msdn.microsoft.com/en-us/library/9dd8z24x.aspx

8 голосов
/ 06 марта 2010

Получил ответ от Джона Роббинса. В основном, вставьте COMPLUS_ZapDisable = 1 в ваши env vars (оберните в летучую мышь, чтобы избежать запуска всей системы без оптимизации) и отключите процесс размещения VS.

http://blogs.msdn.com/sburke/archive/2008/01/29/how-to-disable-optimizations-when-debugging-reference-source.aspx

Другим вариантом является новый .NET Reflector Pro, который позволяет выборочно декомпилировать / перекомпилировать сборки без оптимизации. Не обязательно с эталонным источником, но с хорошей резервной копией.

http://www.red -gate.com / продукты / отражатель / features_pro.htm

1 голос
/ 20 февраля 2010

Почему вы не видите код самой платформы .NET с Reflector ? Reflector позволяет вам увидеть код любой сборки .NET [включая саму .NET Framework!], И даже перекомпилировать его! - Конечно, это относится к неубранным сборкам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...