Как включить "Включить исходный степпинг .NET Framework"?

Обновление 22 февраля 2013 г.. В записи Microsoft Connect есть заметка от Алока Шрирама (диспетчера программ, библиотеки базового класса,.NET Framework), что проблема теперь должна быть решена. Запись Connect отмечена как "Разрешена" (исправлена):

Теперь эта проблема должна быть исправлена. Мы опубликовали обновление для справочных источников.  Сообщите нам, если ваша проблема все еще не исправлена.

Полтора года.

Бонусные ссылки

Оригинальный вопрос

Как включить запуск источника .NET Framework в Visual Studio 2010?


Примечание: этот вопрос представляет собой один кусок большего целого:


В Visual Studio 2010 появилась новая функция:

  • Инструменты, параметры, отладка, Общие, Включить степпинг источника .NET Framework

Screenshot of options menu

Следуя инструкциям на странице MSDN Как отключить источник .NET Framework:

Чтобы включить отладку источника .NET Framework

  • В меню Сервис выберите Параметры.

  • В диалоговом окне Параметры выберите категорию Отладка.

  • В поле Общие установите следующие флажки:

    • Включить степпинг источника .NET Framework
    • Включить поддержку исходного сервера.

Я делаю это:

Screenshot of options menu, highlighting the relevant options selected

Примечание. Вы заметите, как отмечает страница MSDN, и, как я заметил, проверка Включить исходный шаг .NET Framework автоматически отключит ** Включить Just My Код (только для управления). Я также включил диагностические сообщения поддержки исходного сервера.

Включение этих параметров автоматически устанавливает для меня место загрузки кеша символа:

Screenshot of options menu, showing cache directory (highlighted)

Примечание: запись Microsoft Symbol Server уже присутствует (и ее нельзя удалить).


На странице MSDN загружаются символы:

Чтобы загрузить символы Framework, используя окно "Модули"

  • В окне Модули щелкните правой кнопкой мыши модуль, для которого символы не загружаются. Вы можете узнать, загружены ли символы или нет, просмотрев столбец Символы состояния.

  • Наведите указатель мыши на Загрузить символы и нажмите Сервера Symbol Symbian > , чтобы загрузить символы с сервера общедоступных символов Microsoft или путь Symbol Path для загрузки из каталога, в котором вы ранее сохраненные символы.

Я пробую это:

введите описание изображения здесь

а затем загружаются все символы:

Screenshot of modules window, as described above

I & rsquo; ve сидит на точке останова, которая вот-вот выйдет в .NET-код .NET:

Screenshot of code, transcribed below

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

Нажатие F11 заставляет отладчик просто перейти к следующей строке:

Screenshot of code, transcribed below

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
    base.ScaleControl(factor, specified);

    //Record the running scale factor used
    this.scaleFactor = new SizeF(
            this.scaleFactor.Width * factor.Width,
            this.scaleFactor.Height * factor.Height);

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Я сижу в точке останова в своем коде. Я пытаюсь дважды щелкнуть по функции в стеке вызовов. Надеюсь, это позволит мне перейти к .NET-коду:

введите описание изображения здесь

За исключением того, что он не работает: Visual Studio сообщает мне, что нет доступных источников:

Screenshot of error message saying No Source Available

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Если я переключусь на разборку, прежде чем пытаться перейти на .NET-код (Отладка Windows Разборка), я могу см. call в код .NET:

Screenshot of code

И когда я это сделаю, я заканчиваю отладку разборки System.Windows.Forms.ScaleControl:

Screenshot of disassembly window

Что не то же самое, что и как полезный, поскольку он может войти в исходный код .NET Framework.

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Конфигурированный путь кэша символа на моем компьютере содержит файлы кэша символов:

<Т411 >

Таким образом, он загружает файлы символов pdb, но отказывается их использовать.

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Leppie предложил проверить журнал Debug (при открытии окна журнала отладки, иначе он ничего не записывает):

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Раньше в журнале я вижу, что он загружает символы для System.Windows.Forms.dll:

Loaded 'C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.

введите описание изображения здесь

Итак, он находит мои символы, но утверждает, что он не может их найти.

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Парень из Microsoft Italy предлагает отключить Требовать исходные файлы, чтобы точно соответствовать оригинальной версии:

Screenshot of options window

Это не исправить.

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Было высказано предположение, что проблема связана с исходным сервером Microsoft для .NET Framework 4.0. Следуя этому предложению, я переключил проект на целевой .NET Framework 3.5:

введите описание изображения здесь

Это не исправить.

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


Кто-то где-то лениво задавался вопросом, использовал ли другой человек ту же проблему 64-разрядную версию отладчика. Теперь нет такой вещи, как 64-битная версия Visual Studio, но я попытался переключить свой проект с AnyCPU на x86 (он был JITed до x64), в Microsoft не поддерживает 64-разрядные процессоры:

введите описание изображения здесь

Это не исправить:

Step into: Stepping over method without symbols 'System.Windows.Forms.Form.ScaleControl'

Как включить статический шаг источника .NET Framework в Visual Studio 2010?


См. также

Ответ 1

PDB для перехода по исходному коду публикуются только для RTM и пакетов обновления. Таким образом, когда появляется обновление для системы безопасности, и оно изменяет DLL, которую вы пытаетесь отлаживать, это приведет к тому, что исходный шаг не будет работать (то есть вы получите "Нет источника в наличии" с серым цветом "Browse to find Source" ).

Однако, как только вы внесете все необходимые настройки, вы можете использовать следующее обходное решение. Обходной путь заключается в том, чтобы найти обновления безопасности, которые вызвали изменение dll, а затем удалить их. Это имеет очевидный недостаток в том, что эти обновления безопасности удалены на вашем компьютере.

Обход

  • Определите, какую dll вы хотите отлаживать (например, System.Windows.Forms.dll)
  • Во время отладки откройте окно Модули в Visual Studio, найдите столбец "Версия". Если версия не является версией RTM или Service Pack, вам необходимо выполнить рабочий процесс. Как правило, dll RTM будет говорить "построено: RTMRel". Хотя DLL, которая была частью обновления для системы безопасности, скажет: "построено: RTMGDR". Обратите внимание на номер версии (например, 4.0.30319.269, созданный: RTMGDR).
  • Теперь мы хотим найти обновление, создавшее эту версию. Сделайте это, выполнив поиск номера DLL и версии по адресу support.microsoft.com/kb/ Например, я выполнил следующий поиск в Google: site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  • Поиск должен содержать информацию об обновлении. Обратите внимание на номер KB в адресной строке. В моем примере адрес был http://support.microsoft.com/kb/2604121, поэтому KB2604121, нас интересует.
  • Перейдите в Панель управления- > Программы и компоненты и нажмите "Просмотреть установленные обновления"
  • Найдите обновление с указанием номера KB (вы можете использовать поиск в правом верхнем углу).
  • Удалите это обновление.
  • Повторите этот процесс для этой же DLL, пока dll вернется к версии RTMRel или версии SP. Например, для System.Windows.Forms.dll мне пришлось удалить KB2686827, KB2604121, KB2518870, прежде чем он вернется к версии RTMRel.

Вам нужно будет сделать это для каждой DLL в рамках .NET, которую вы хотите отлаживать.

После этого установите точку останова в источнике .net(например, перейдите на вкладку "Точки останова", скажем New- > Break at Function и введите System.Windows.Forms.Form.Form) или выполните одно из следующих действий: методы .net в этой DLL.

Ответ 2

Хотя, к сожалению, проблема с Microsoft, как заметил Леппи (и я получил тот же результат, см.

следует отметить, что ваша попытка в любом случае потерпит неудачу, поскольку вы указали:

  • Сервер Microsoft Symbol Server

вместо:

  • referencesource.microsoft.com/symbols

См. раздел FAQ/Поиск и устранение неисправностей Настройка Visual Studio для отладки исходного кода .NET Framework

Ответ 3

Я нашел ответ, я думаю.

Я проследил, что происходит на Fiddler. Кажется, что в настоящее время доступны только символы, и нет источника.

Когда VS пытается загрузить символы с сервера sourceource, он терпит неудачу (404). Поскольку это не удается, я думаю, что он не может отображать исходные файлы на этом сервере.

http://referencesource.microsoft.com/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pdb

После вышеуказанного сбоя он пытается использовать какой-то сервер под названием msdl, где он находит фактический PDB (но, похоже, у него нет информации о исходном коде).

http://msdl.microsoft.com/download/symbols/mscorlib.pdb/ED96A7F38A2940F39B9CA7AD9BC5CB671/mscorlib.pd_

В общем, это, по-видимому, (временная) проблема Microsoft с их серверами.

Я уверен, что у меня был некоторый исходный код некоторое время назад. Но теперь он не работает.

Редактировать:

Я попробовал это с различными версиями.NET, все равно результат. :(

Ответ 6

Вот официальные инструкции https://referencesource.microsoft.com/setup.html

Настройка Visual Studio 2013 для отладки .NET framework

Чтобы настроить Visual Studio 2013, выполните следующие действия в Инструментах → Параметры → Отладка → Общее меню:

  • Отключить мой код
  • Отключить переход по свойствам и операциям
  • Отключить, чтобы исходные файлы соответствовали исходной версии
  • Включить степпинг источника .NET Framework
  • Включить поддержку исходного сервера.