Поделиться через


Символы

Символы полезны для отладки и других средств диагностики. Содержимое файлов символов зависит от языков, компиляторов и платформ. На высоком уровне символы — это сопоставление исходного кода и двоичного файла, созданного компилятором. Эти сопоставления используются такими средствами, как Visual Studio и Visual Studio Code для разрешения сведений об номере исходной строки или локальных имен переменных.

Документация по символам Windows содержит более подробную информацию о символах для Windows, хотя многие концепции также применимы к другим платформам.

Узнайте о переносимом формате PDB .NET

.NET Core представил новый формат файла символов (PDB) — переносимого PDB. В отличие от традиционных PDOB-файлов, которые доступны только для Windows, переносимые PDF-файлы можно создавать и читать на всех платформах.

Что такое PDB?

PDB-файл является вспомогательным файлом, созданным компилятором для предоставления других средств, особенно отладчиков, сведений о том, что находится в основном исполняемом файле и как он был создан. Например, отладчик считывает PDB для сопоставления foo.cs строки 12 с правильным расположением исполняемого файла, чтобы он смог задать точку останова. Формат PDB для Windows существует уже долгое время и произошел из других более старых форматов символов отладки. Она была первоначально создана в качестве формата для программ на языках C/C++. В первом выпуске .NET Framework формат Windows PDB был расширен для поддержки .NET.

Формат Portable PDB был представлен в .NET Core и используется по умолчанию при использовании .NET. При выборе платформы .NET Framework можно включить переносимые символы PDB, указав <DebugType>portable</DebugType> в файле проекта. Переносимый формат PDB основан на формате метаданных ECMA-335. Дополнительные сведения см. в статье "Переносимая PDB версии 1.0: спецификация формата". Средства диагностики могут использовать библиотеку System.Reflection.Metadata для чтения переносимых PDB-файлов (см. пример System.Reflection.Metadata.Document).

Использование правильного формата PDB для вашего сценария

Ни переносимые PDB-файлы, ни PDB-файлы Windows не поддерживаются везде. Чтобы решить, какой формат следует использовать, рассмотрите место использования и отладки проекта. Если у вас есть проект, который вы хотите использовать и отлаживать в обоих форматах, можно использовать разные конфигурации сборки и создать проект дважды для поддержки обоих типов потребителей.

Поддержка переносимых PDB-файлов

Переносимая PDB может быть прочитана в любой операционной системе и является рекомендуемой форматом символов для управляемого кода. Однако существует ряд устаревших средств и приложений, где они не поддерживаются:

  • Приложения, предназначенные для .NET Framework 4.7.1 или более ранних версий: вывод трассировки стека с сопоставлением номеров строк (например, на странице ошибки ASP.NET). Названия методов не изменяются, только имена исходных файлов и номера строк не поддерживаются.

  • При использовании декомпилеров .NET, таких как ildasm или рефлектор .NET, вы не увидите сопоставления исходных строк или имена локальных параметров.

  • Последние версии DIA и инструментов, которые используют DIA для чтения символов, таких как WinDBG, поддерживают переносимые PDB, но старые версии не поддерживают.

  • Могут быть более старые версии профилировщиков, которые не поддерживают переносимые PDB.

Чтобы использовать переносимые PDB-файлы в средствах, которые не поддерживают их, можно использовать Pdb2Pdb, который преобразует переносимые PDB-файлы в PDB-файлы Windows и наоборот.

Поддержка Windows PDB-файлов

Файлы PDB Windows могут создаваться или читаться только в Windows. Использование PDB-файлов Windows для управляемого кода устарело и требуется только для инструментов для устаревших систем. Рекомендуется использовать переносимые PDF-файлы вместо PDF-файлов Windows, так как некоторые новые функции компилятора реализуются только для переносимых PDF-файлов.

См. также