Отладка кода .NET с MS Symbol Server - VS не показывает значения переменных

StackOverflow https://stackoverflow.com/questions/294738

  •  08-07-2019
  •  | 
  •  

Вопрос

Когда я отлаживаю код своего веб-сайта ASP.NET, используя символ отладки Microsoft для .NET, я продолжаю получать этот глупый «результат» для большинства переменных, когда отлаживаю код платформы .NET (который, конечно, предоставленный Microsoft Symbol Server, который я сказал VS2008, чтобы получить информацию, из)

Cannot obtain value of local or argument 'cookie' as 
it is not available at this instruction pointer, possibly because 
it has been optimized away.

Это похоже на то, что код, который я использую, использует оптимизированный скомпилированный код. Если это так, могу я сказать, что НЕ оптимизировать? Я в конфигурации DEBUG. Это очень расстраивает, потому что я не могу отладить .. потому что я не могу видеть / получать значения локальных переменных, когда я шагаю по коду.

Какие-нибудь подсказки / мысли?

Это было полезно?

Решение

Шон Берк описал метод отключения этого на своем блог .

Сначала создайте CMD, которая будет загружать Visual Studio без оптимизации JIT.

set COMPLUS_ZapDisable=1
cd /d "%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\ide\"
start devenv.exe
exit

Попав в проект Visual Studio, выполните следующие действия:

1) Щелкните правой кнопкой мыши файл своего проекта и выберите «Свойства»

2) Выберите " Отладку " и снимите флажок " Включить процесс размещения Visual Studio "

3) Запустите ваше приложение в отладчике.

Другие советы

Для обычного приложения .Net вы можете отключить использование JIT-оптимизаций с файлом .INI рядом со стартовым двоичным файлом. Вот ссылка на то, как это делается

http: // blogs.msdn.com/jaredpar/archive/2008/08/29/disabling-jit-optimizations-while-debugging.aspx

Отладка ASP.Net немного отличается, и я не уверен, будет ли это работать для вас. Если вы выполняете локальную отладку с помощью облегченного веб-сервера (cassini), вы можете применить этот прием к самому Cassini. Если вы выполняете отладку непосредственно на веб-сервере, хотя внутри IIS я не знаю, как заставить этот трюк работать, но, надеюсь, он приведет вас в правильном направлении.

После долгих исследований мне удалось найти способ также сделать это "COMPLUS_ZapDisable" " Техника работы при подключении к приложению IIS под управлением IIS7 / Windows 7 x64.

В моем случае я использую символы, созданные Reflector Pro, хотя я предполагаю, что он также будет работать для символов Microsoft, о которых спрашивал ОП.

Хитрость в том, чтобы найти правильное место для установки этой переменной среды, чтобы ваш w3wp.exe запускался с включенным этим параметром. Для этого добавьте строковый ключ с именем " COMPLUS_ZAPDISABLE " в ваш реестр по адресу HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment " ;. Установите значение ключа на «1», и это должно сработать. Не делай этого на производстве =)

Слава Клайву Тонгу, автору этой публикации от Красных Ворот, за то, что указал мне правильное направление.

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

Наконец, это решение сработало для меня при подключении к aspnet_wp.exe Visual Studio 2008, .NET Framework 2.0: перейдите в свойства проекта, на вкладку «Сборка», кнопка «Дополнительно» - > установите «Отладочную информацию для вывода» на «полный». Надеюсь, это кому-нибудь поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top