Загрузить символы.NET PDB от Microsoft

Я установил сервер символов в VS 2010 в соответствии с этим:

http://msdn.microsoft.com/en-us/library/vstudio/b8ttk8zy(v=vs.100).aspx

Но моя цель - войти в класс Regex в пространстве имен RegularExpressions:

Imports System.Text.RegularExpressions

Module Module1
    Sub Main()
        Dim matObject As Match = Regex.Match("abc", "a")
    End Sub
End Module

Я знаю, что символы RegularExpressions в сборке System.dll были обнародованы очень давно, потому что я недавно прочитал об этом статью, которая была взволнована и сделала небольшой обзор. Но я не могу найти статью.

На самом деле, когда я "Step Into" моя функция Match, она даже не дает мне диалоговое окно Step-Over. Это просто перешагивает.

1 ответ

Решение

Оказывается, есть несколько проблем, связанных с этим. Часть из них включает Visual Studio 2008 SP1, но это вряд ли актуальная проблема в конце 2013 года.

Решение для меня было... Не используйте Symbol Server. По крайней мере, в VS 2010 это заставляет вас использовать "Серверы Microsoft Symbol", которые, в зависимости от одного или двух факторов, могут загружаться из общего местоположения или могут загружаться с http://referencesource.microsoft.com/symbols.

Проблема с обоими, в том, что каждый раз, когда я использовал эти местоположения файлов символов, они лишались PDB. Хотя, как вы могли заметить в поддомене " http://referencesource.microsoft.com/symbols", справочный источник становится все ближе.

Так что я сделал, чтобы перейти к: Скачать источник, который находится в том же поддомене. Поскольку я использую.NET 4.0, я скачал исходные файлы.NET 4.0.

WTF?? Итак, теперь я скачал какой-то ненужный файл с именем NetFramework.aspx. Он просто замораживает мой компьютер, когда я его открываю. В чем смысл? Ну, никто не говорит вам об этом, но вы должны переименовать его в Whwhat.msi. Это на самом деле установщик.

После запуска установщика у вас есть полные символы где-то на вашем компьютере. YAY СНОВА!!! На этом этапе вам нужно убедиться, что ваша Visual Studio настроена правильно.

  1. Убедитесь, что ваш проект Framework соответствует Framework вашего источника, который вы только что загрузили. (И / или наоборот)
  2. Убедитесь, что "Включить пошаговое выполнение.NET Framework" включено.
  3. Для меня в меню "Настройки"> "Отладка"> "Символы" я выбрал "Только указанные модули" и ничего там не выбрал. Кроме того, я не проверил местоположения PDB, поэтому ничего не было выбрано.
  4. Иногда цель платформы является проблемой. Мой установлен на AnyCPU, но вам может понадобиться экспериментировать?

ХОРОШО!! Все готово, давайте сделаем это... Fail.

Теперь, когда вы нажимаете F11, он все равно перешагивает через код. Хорошо, если вы посмотрите на свои Модули (во время работы), НАДЕЖНО символы для System или mscorlib или чего-то еще, что ваша сборка говорит СИМВОЛЫ НЕ ЗАГРУЖЕНЫ. (Это хорошо).

Почему это хорошо? Потому что, если они загружены, вы не можете их загрузить. И, как правило, если они загружены, они загружаются из какого-то опасного места с раздетой PDB, которое никуда вас не приведет. Таким образом, вы щелкаете правой кнопкой мыши по выбранной сборке и выберите Load From Path... и идете туда, куда вы установили эти PDB из MSI.

Что ж, отлично... теперь, если вы попытаетесь войти в код.NET Framework или если вы попытаетесь загрузить код из Call-Stack, вы просто получите ошибку отсутствующего кода, а опция для поиска исходного кода будет Greyed Out.!! Ну, я думал, что у нас был код!!!! Я просто загрузил его.

Давайте вернемся к окну модуля. Рядом со сборкой, которую вы хотите загрузить, вы, вероятно, заметите в версии, что она говорит что-то вроде "build by: RTMGDR" или "RTMRel" или что-то в этом роде. Что ж, RTMGDR означает, что текущая версия используемого кода отличается от оригинальной. Почему это отличается? Потому что обновление безопасности KB было установлено. А поскольку Код отличается от PDB... вы не можете вмешаться.

К сожалению, вы не можете получить последнюю версию PDB. Кто знает, почему... может быть, потому что это обновление для системы безопасности. Но то, что вы МОЖЕТЕ сделать... это ваша версия Google так:

"mscorlib.dll" 4.0.30319.xxx сайт:support.microsoft.com/kb

Вам не нужно ничего нажимать. Просто посмотрите на URL первого результата, и вы увидите номер КБ примерно так:

support.microsoft.com/kb/12345

Откройте "Установка и удаление программ" ("Выполнить: appwiz.cpl") и просмотрите "Установленные обновления". Вы ОЧЕНЬ легко найдете этот KB в вашей группе Visual Studio и сможете удалить его.

Затем снова запустите Visual Studio... и вы, вероятно, увидите новую RTMGDR с более старой версией... Google, удалите ее КБ... промойте и повторите.

СОХРАНИТЕ ТРЕК КБ, КОТОРЫЙ ВЫ УДАЛИТЕ (В заказе). Таким образом, вы можете позже переустановить их после вашего исследования.

Как только вы окончательно вернетесь к версии xxxxxx.1 (RTMRel), вы запустите Visual Studio до точки останова... Откройте ваши модули... Загрузите символы по пути... Выберите ваши PDB из MSI... Затем.... Шагните в свой.NET код

В КОНЦЕ КОНЦОВ!!!

Теперь, когда вы закончите, переустановите эти КБ, но оставьте все остальные настройки такими же для следующего раза. Безопасность важна.

Другие вопросы по тегам