«Обзор, чтобы найти источник» в Visual Studio 2010 - PullRequest
26 голосов
/ 17 мая 2011

Когда в Visual Studio 2010 включен «Обзор для поиска источника»? (см. ниже)

Enter image description here

Кроме того, я хочу, чтобы он был включен, чтобы я мог просматривать уже загруженный исходный код файлы из http://referencesource.microsoft.com/.

Это было бы полезно, поскольку Microsoft не всегда выпускает исходный код PDB / одновременно с их последними исправлениями. Так что, если я хочу перейти, например, в DateTime, меня действительно не волнуют последние патчи, которые не включают DateTime. Я просто хочу просмотреть его код, который я скачал с http://referencesource.microsoft.com/.

После некоторых исследований я обнаружил dia2dump , который является полезным инструментом для просмотра содержимого файла PDB. (Это в C:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\)

Похоже, что когда я не вижу исходного кода для чего-то вроде DateTime, используя степпинг .NET Framework, файл mscorlib.pdb фактически загружается.

Но если вы загляните внутрь него с помощью dia2dump , он не будет содержать сопоставления исходного файла. Другими словами, бесполезно, потому что даже если бы вы могли просматривать исходный код, как моя первоначальная идея, это не сработало бы, потому что нет отображений исходного файла и начальных адресов функций, а также много чего не хватает :(

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

Ответы [ 2 ]

26 голосов
/ 18 мая 2011

Введение

Каждый раз, когда вы выполняете сборку из Visual Studio, обычно вы также получаете файл PDB помимо исполняемого файла.Вы можете увидеть этот файл в каталоге ..bin\Debug или ..bin\Release.Этот файл PDB хранит соответствие строк исходного кода и исполняемого кода в вашей сборке.Кроме того, исходные местоположения файлов исходного кода, из которых была сделана сборка, хранятся в файле PDB.Это означает, что если вы создаете библиотеку классов, в которой один файл расположен в G:\ClassLibrary\Class1.cs, этот путь будет храниться внутри ClassLibrary.pdb.Из всего этого важно помнить, что без файла PDB невозможно выполнить пошаговую отладку исходного кода.

Реальный сценарий

Итак, предположим, что я делаю сборку намой диск G:\ClassLibrary1 для библиотеки классов.

Я даю вам файл ClassLibrary.dll и ClassLibrary.pdb, либо вы можете получить их, извлекая их из системы контроля версий.

Выссылаться на ClassLibrary.dll в вашем проекте, и вы используете класс из библиотеки.

Если вы сейчас попытаетесь перейти к коду класса из библиотеки, произойдет следующее:

Visual Studio попытаетсянайдите файл ClassLibrary.pdb в нескольких местах

  • 1.1 Если он не найден, вы получите отключенную страницу «Обзор, чтобы найти источник».Помните, что вы не можете выполнить отладку без действительного файла PDB.

  • 1.2 Если он находит файл PDB, он просматривает файл PDB и видит, что вы пытаетесь отладить Class1.cs который был изначально создан из

    G:\ClassLibrary1\Class1.cs
    

    и ищет на вашем компьютере этот файл.

  • 1.2.1 Если он находит его, он автоматически входит в код.

  • 1.2.2 Если он не найден, вы получите следующий диалог:

Browse to source file

Если вы нажмете «Отмена», вы увидите: «Источник недоступен», и в этом случае у вас будет включен «Обзор, чтобы найти источник».

Enter image description here

Почему?Потому что у вас есть действительный файл PDB, но Visual Studio не может знать, где у вас есть исходный код для ClassLibrary1 на вашем компьютере или даже если он у вас есть на вашем компьютере.Вот почему вы получили диалоговое окно ->, чтобы вы могли указать Visual Studio точное местоположение файла исходного кода.

Заключительные примечания

Так что вы будете делать, когда перейдете кнайти источник отключен?

В Visual Studio вы открываете меню Отладка -> Windows -> Стек вызовов .

Вы щелкаете правой кнопкой мыши на верхней инструкции по вызову и выбираете «Информация о загрузке символа».Он покажет вам места, где Visual Studio пыталась найти действительный файл PDB.

  • 1.a Если вы видите только сообщения «Не удается найти или открыть файл PDB», поместите действительный файл PDB в любойиз этих мест.(Возможно, вам придется прокрутить вправо, чтобы увидеть сообщения). Остановитесь и снова начните отладку.
  • 1.b Если вы видите сообщение «PDB не соответствует изображению», это означает следующее.Visual Studio нашла файл PDB, но он для другой сборки.Если я соберу ClassLibrary1.dll и дам его вам, а затем соберу снова, не меняя ни одной строки кода, а затем дам вам PDB, и вы попытаетесь отладить classLibrary1.dll, вы получите это сообщение.Сборка и ее файл PDB должны быть точно из одной сборки, в противном случае вы получите это сообщение.(Эта проверка выполняется с использованием уникального номера, помещенного в сборку и файл PDB каждый раз, когда вы выполняете сборку)
  • 1.c Вы видите сообщение «Символы загружены», но по-прежнему отключено «Обзор, чтобы найти». Это означает, что файл PDB не подходит для пошаговой отладки. Некоторые файлы PDB, которые вы пытаетесь использовать, не содержат в себе всей информации, необходимой для отладки. Я думаю, что вы можете управлять этим где-то в расширенных настройках сборки, но я не пробовал, хотя, потому что я хочу, чтобы генерируемые файлы PDB создавались каждый раз, когда я делаю сборку. Такая ситуация часто возникает, если вы пытаетесь отладить исходный код самой платформы .NET , и Microsoft не поместила пригодные для использования файлы PDB для исходного кода, а вместо этого Microsoft добавила некоторые файлы PDB, которые не могут использоваться для пошаговой отладки. Это происходит чаще, чем вы думаете, потому что часто Microsoft делает обновления (исправления) для исходного кода .NET Framework. Эти обновления автоматически устанавливаются на ваш компьютер через Windows Update , и вы удивляетесь, увидев, что вчера вы могли отлаживать исходный код .NET Framework, а сегодня - нет. Обычно требуется некоторое время, пока они не поместят действительный файл PDB для последнего кода. В этом случае вы можете использовать .NET Reflector Pro возможность пошаговой отладки или виртуальную машину с версией .NET Framework с используемыми файлами PDB и отключить Центр обновления Windows на этом компьютере.
0 голосов
/ 17 мая 2011

Ознакомьтесь со статьей Шаг в .NET Framework 4.0 Исходный код .

Если вы видите экран «Источник недоступен», попробуйте нажать «Обзор, чтобы найти источник» и найти нужный файл в каталоге источника. Вы, вероятно, должны использовать поиск файлов, чтобы найти его. Это делается только один раз, поскольку с этого момента Visual Studio запоминает это местоположение и ищет там отсутствующие исходные файлы.

Я надеюсь, что это то, что вы ищете.

...