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

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

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

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

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

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

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


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


Visual Studio 2010 поставляется с новой функцией:

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

Скриншот меню настроек

Следуя инструкциям на странице MSDN Практическое руководство . Отладка.NET Framework Источник:

Включение отладки исходного кода.NET Framework

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

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

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

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

Я сделаю это:

Снимок экрана меню опций с выделением соответствующих опций

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

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

Снимок экрана меню опций, показывающий каталог кеша (выделено

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


На странице MSDN сказано загрузить символы:

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

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

  2. Укажите " Загрузка символов из" и нажмите " Серверы символов Microsoft", чтобы загрузить символы с сервера общедоступных символов Microsoft или "Путь к символам" для загрузки из каталога, в котором ранее были сохранены символы.

Я пытаюсь это:

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

Снимок экрана: окно модулей, как описано выше

Я сидел на точке останова, которая собирается вызвать код платформы.NET:

Скриншот кода, расшифрованный ниже

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

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

Скриншот кода, расшифрованный ниже

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 сообщает, что нет доступного источника:

Снимок экрана с сообщением об ошибке

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


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

Снимок экрана с кодом

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

Скриншот окна разборки

Это не то же самое, что и полезность возможности войти в источник.NET Framework.

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


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

Скриншот списка папок

Так что скачивание pdb файлы символов, но отказываются их использовать.

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


Леппи предложила мне проверить Debug log (с открытым окном журнала отладки; в противном случае он ничего не регистрирует):

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 предлагает отключить параметр Требовать исходные файлы, чтобы он точно соответствовал исходной версии:

Скриншот окна настроек

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

Как включить пошаговое выполнение исходного кода.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?


Смотрите также

9 ответов

Решение

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

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

Временное решение

  1. Определите, в какую DLL вы хотите отлаживать (например, System.Windows.Forms.dll)
  2. Во время отладки откройте окно " Модули" в Visual studio, найдите столбец " Версия". Если версия не является окончательной первоначальной версией или версией пакета обновления, вам потребуется выполнить рабочий процесс. Как правило, RTM DLL скажет "построено: RTMRel". В то время как dll, которая была частью обновления для системы безопасности, скажет "build by: RTMGDR". Обратите внимание на номер версии (например, 4.0.30319.269, созданный: RTMGDR)
  3. Теперь мы хотим найти обновление, которое создало эту версию. Сделайте это, выполнив поиск по dll и номеру версии на support.microsoft.com/kb/ Например, я выполнил следующий поиск в Google:site:support.microsoft.com/kb System.Windows.Forms.dll 4.0.30319.269
  4. Поиск должен найти информацию об обновлении. Запишите номер КБ в адресной строке. В моем примере адрес был http://support.microsoft.com/kb/2604121Итак, KB2604121, это то, что нас интересует.
  5. Перейдите в Панель управления-> Программы и компоненты и нажмите "Просмотр установленных обновлений"
  6. Найдите обновление, в котором указан номер КБ (вы можете использовать поиск в правом верхнем поле).
  7. Удалите это обновление.
  8. Повторяйте этот процесс для той же самой библиотеки 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.

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

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

  • Microsoft Symbol Server

вместо:

  • referencesource.microsoft.com/symbols

См. Раздел "Часто задаваемые вопросы / Устранение неполадок" в настройке Visual Studio для отладки исходного кода.NET Framework

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

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

Когда VS пытается загрузить символы с сервера "источник ссылок", это не удается (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, все тот же результат.:(

Пока это не работает, если у вас установлен SP1. Вот некоторые комментарии о проблеме формы MS: http://social.msdn.microsoft.com/Forums/en-US/refsourceserver/thread/41388c7b-582b-4e3f-8178-3d38a3c99639

В моем случае я отлаживал старое WinNET- приложение.NET 2.0 и получал сообщение "Source Not Available". Я перепробовал все рекомендуемые настройки.

В конце концов, я перестроил приложение, чтобы временно нацелиться на .NET 4.5, и смог заставить работать исходный код. Возможно, мое приложение было слишком старым для перехода на исходный код. Вид поражения цели, я знаю, но для быстрого и грязного тестирования это работает. У меня ошибка все еще присутствует в .NET 4.5.:)

Целевые рамки

Мне помогло использование dotPeek в качестве сервера символов. (фреймворк 4.6.2) (я сделал все, что упоминалось в этой теме, и ничего не получилось, обновления безопасности не найдены... и т. д.)

https://hmemcpy.com/2014/07/how-to-debug-anything-with-visual-studio-and-jetbrains-dotpeek-v1-2/

JetBrains dotPeek декомпилирует ваши настоящие библиотеки DLL .NET, а затем размещает сервер символов, с которого вы загружаете символы в Visual Studio. После довольно медленной загрузки, а затем перезапуска VS я смог установить точку останова и перейти к коду.

Вы можете найти справочный источник здесь, доступный для скачивания:

Справочный источник.NET Framework 4.0

Источники WCF, WF и даже 4.5 Beta / RC и многих других можно найти там же:

Microsoft Referencesource NetFramework

Если вы хотите отлаживать открытый исходный код (например, пакет nuget), вы можете добавить этот URL в список серверов символов

http://srv.symbolsource.org/pdb/Public

http://www.symbolsource.org/Public/Home/VisualStudio

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

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

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

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