Debugging.NET код с сервером символов MS-VS не показывает значения переменной

когда я отлаживаю ASP.NET код веб-сайта с использованием символа отладки Microsoft для .NET .. Я продолжаю получать этот глупый "результат" для большинства переменных, когда я отлаживаю код .NET framework (который, конечно, предоставляется сервером символов Microsoft, который я сказал 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.

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

любые подсказки/мысли?

5 ответов


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

сначала создайте 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), вы можете применить этот трюк с самим Кассини. Если вы отлаживаете непосредственно на веб-сервере, хотя внутри IIS я не знаю, как заставить этот трюк работать, но, надеюсь, он приведет вас в правильном направлении.


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

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

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

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


код .NET framework оптимизирован, поэтому вы не сможете просматривать все переменные, поскольку они, вероятно, не существуют в оптимизированном коде. Я предполагаю, что вы пытаетесь отладить внутри самой .NET framework. Ничего не поделаешь, к сожалению.


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