Как включить «Включить пошаговое выполнение исходного кода .NET Framework»? - PullRequest
114 голосов
/ 15 ноября 2011

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

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

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

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

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

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


Примечание : Этот вопрос состоит из одного вопросабольшее целое:


Visual Studio 2010 comс новой функцией:

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

Screenshot of options menu

Следуя инструкциям на странице MSDN Как выполнить отладку .NET Framework Source :

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

  1. В меню Инструменты нажмите Параметры .

  2. В диалоговом окне Параметры нажмите Отладка категория.

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

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

Я делаю это:

Screenshot of options menu, highlighting the relevant options selected

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

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

Screenshot of options menu, showing cache directory (highlighted)

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


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

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

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

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

Я пробую это:

enter image description here

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

Screenshot of modules window, as described above

Я сидел наточка останова, которая собирается вызвать код платформы .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:

enter image description here

За исключением того, что это не работает: 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?


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

Screenshot of folder listing

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

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


Леппи предложил мне проверить журнал 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.

enter image description here

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

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

enter image description here

Это не помогло.

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


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

enter image description here

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

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

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


См. Также

Ответы [ 8 ]

35 голосов
/ 15 сентября 2012

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 Framework, в который вы хотите отладить.

Как только это будет сделано, установите точку останова в источнике .net (например, перейдите на вкладку Точки останова, скажем New-> Break at Function, и введите System.Windows.Forms.Form.Form) или перейдите к одному из методов .net в этой dll.

6 голосов
/ 16 июля 2012

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

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

  • Microsoft Symbol Server

вместо:

  • referencesource.microsoft.com/symbols

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

4 голосов
/ 17 ноября 2011

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

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

Когда 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 с их серверами.

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

Edit:

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

1 голос
/ 05 марта 2012

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

0 голосов
/ 03 ноября 2018

В моем случае я отлаживал старое .NET 2.0 WinForms приложение, и я получил «Источник недоступен» . Я перепробовал все рекомендуемые настройки.

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

Target Framework

0 голосов
/ 27 октября 2016

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

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

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

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

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

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

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

0 голосов
/ 16 июля 2012

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

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

Источники для WCF, WF и даже 4.5Бета / RC и многое другое можно найти здесь:

Microsoft Referencesource NetFramework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...