2013-02-10 3 views
2

Я хочу отладить код Microsoft на сайте SharePoint.Отладка кода Microsoft SharePoint - отключить оптимизацию

загрузить .NET Reflector Visual Studio Extension, так что я могу уйти в код Microsoft, но когда я пытаюсь получить значение некоторых переменных - я получаю ошибку: "Cannot obtain value of local or argument <this> as it is not available at this instruction pointer, possibly because it has been optimized away."

Я стараюсь, чтобы отменить оптимизацию, я увидел, что написал Камерон MacFarland here, поэтому я создал файл с командами, открывающими VS без оптимизации JIT. Что касается второго действия - я не знаю, как это сделать, когда дело доходит до приложения SharePoint, в котором работает IIS.

Как достичь этого?

EDIT: Мой вопрос в основном: как отключить оптимизацию кода, когда код запускается IIS?

ответ

1

Решение, которое я сделал в конце концов, более или менее то, что JaredPar написал here:

Я создал файл, который выглядит следующим образом:

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

И я положил его в GAC, в каждой папке dll я хотел отключить ее оптимизацию и назвал ее именем dll с расширением «ini».

Теперь подавляющее большинство переменных доступно мне.

+0

Да, это сработало и для меня. Это кажется более надежным, чем просто использование изменения реестра. – killthrush

+1

Имя не должно содержать "dll". Например, если я хочу запустить неоптимизированную System.Web.dll, тогда мне нужен файл с именем System.Web.ini рядом с ним (а не System.Web.dll.ini). –

1

Я отправил ответ here, а затем увидел, что он также применяется к вашему конкретному вопросу.

Короткий рассказ, есть настройка реестра, которую вы можете изменить, чтобы сделать эту работу. Добавьте строковый ключ с именем «COMPLUS_ZAPDISABLE» в свой реестр в «HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment». Установите значение ключа в «1»

Этот оригинал Red Gate article помог мне найти этот трюк.

+0

Это помогло мне увидеть ценность некоторых из этих переменных, которые недоступны. Спасибо. – banana

+0

Теперь мне это нужно еще раз, я добавил этот ключ, и все еще - многие переменные недоступны для меня. Может быть, я должен что-то еще сделать? – banana

+0

Я бы рекомендовал попробовать некоторые дополнительные техники, упомянутые в статье Клайва, особенно о том, как использовать windbg для фактического просмотра поведения джинга. Для меня я смог последовательно отлаживать, используя только параметр реестра, поэтому мне не нужно было так далеко. Скорее всего, если ваши вары будут оптимизированы, это из-за джитсинга. Трюк заключается в том, чтобы выяснить, что его запускает - может быть больше одного пути. Одна идея, которая приходит на ум, заключается в использовании изолированного пула приложений для отладки вашего кода, чтобы убедиться, что какое-то другое приложение не вызывает загрузку оптимизированного кода. – killthrush

Смежные вопросы