Введение
Каждый раз, когда вы выполняете сборку из 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 Если он не найден, вы получите следующий диалог:
Если вы нажмете «Отмена», вы увидите: «Источник недоступен», и в этом случае у вас будет включен «Обзор, чтобы найти источник».
Почему?Потому что у вас есть действительный файл 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 на этом компьютере.