Что такое формат файла PDB?
Файлы .pdb содержат базу данных для программы - в частности, структурированное хранилище символов отладки, сопоставлений исходных файлов и информации о типах, созданное инструментарием Microsoft Visual C++. Они используются вместе с соответствующими .exe или .dll, из которых они были скомпилированы; они не встраиваются внутрь этих бинарных файлов, а распространяются как отдельные файлы.
Отладочная информация
Символы отладки, хранящиеся в файлах .pdb, позволяют отладчикам передавать важную информацию об исключениях, сопоставлять адреса памяти с номерами строк исходного кода и раскрывать имена функций и переменных, которые удаляются из финального бинарного файла. Они полезны при поиске и устранении ошибок как в среде разработки, так и в рабочей среде.
Как создаются файлы .pdb
Файлы .pdb генерируются из исходных файлов в процессе компиляции компилятором MSVC (cl.exe) и компоновщиком (link.exe). Они *не являются* продуктом Just-In-Time (JIT) компиляции - это распространенное заблуждение. Современные файлы .pdb используют бинарный контейнер MSF 7.00 (Multi-Stream File), представленный в Visual Studio .NET. Каждый .pdb привязан к своему бинарному файлу через GUID и счетчик Age; .pdb от другой сборки не загрузится. Поскольку формат является проприетарным, только специализированные инструменты, такие как Visual Studio, WinDbg или llvm-pdbutil, могут читать их, хотя Microsoft опубликовала эталонную реализацию.
Безопасность и защита
РИСК: LOWPDB - это пассивные данные, считываемые отладчиками; они не содержат исполняемого кода, поэтому открывать их безопасно. Реальная проблема заключается в конфиденциальности, а не во вредоносном ПО: PDB раскрывает внутренние имена функций, пути к исходным файлам и структуру кода, поэтому поставка или утечка такого файла раскрывает внутреннее устройство вашего ПО (что полезно для реверс-инжиниринга). Храните релизные PDB на частном сервере символов, а не поставляйте их вместе с продуктом.
Детали формата
в двух словах- База данных Palm OS (книга PalmPilot / eReader) - База данных Palm PRC/PDB - электронные книги и данные приложений КПК (заголовок «...» по смещению 0x3C); открывается инструментами Palm/eReader, а не Visual Studio.
- Молекулярная структура Protein Data Bank - Текстовый файл PDB, описывающий трехмерные атомные координаты молекулы; открывается PyMOL/Chimera/Jmol.
- Данные о ценах/портфеле Quicken (.pdb) - Intuit Quicken записывал файл данных .pdb - значение, к которому база данных ошибочно привязала программу открытия «Quicken».
Программы, открывающие файлы PDB
Технические подробности
глубокая спецификация| Формат контейнера | MSF (Multi-Stream File) - страничный внутренний контейнер потоков, который содержит несколько именованных потоков данных в одном файле |
| Сигнатура файла (magic bytes) | Начинается со строки ASCII `Microsoft C/C++ MSF 7.00`, за которой следуют CR LF и специфические управляющие байты по смещению 0; устаревшие файлы PDB 2.0 начинаются с `Microsoft C/C++ program database 2.00` |
| Кодировка | Бинарная, порядок байтов little-endian (от младшего к старшему) |
| Внутренние потоки | DBI (отладочная информация), TPI/IPI (записи типов и ID), потоки публичных и глобальных символов, потоки символов для каждого модуля и таблицы сопоставления исходных кодов/номеров строк |
| Ключ связи с бинарным файлом | GUID + счетчик Age, записанные как в `.pdb`, так и в каталог отладки связанного с ним `.exe` или `.dll`; несоответствие заставляет отладчик отклонить файл символов |
| Типичный размер файла | От 100 КБ до 500 МБ; крупные нативные проекты на C++ регулярно создают файлы `.pdb` размером в сотни мегабайт |
| Сжатие | Отсутствует - данные имеют страничную структуру, но не сжаты |
| Размер страницы | Страницы по 4 КБ в MSF 7.00 (BigMsf); старый контейнер MSF 2.0 использовал меньшие размеры страниц |
| Варианты формата | PDB 2.00 (устаревший магический номер JG, MSVC 6.0 и ранее); MSF 7.00 / BigMsf (Visual Studio .NET и выше, текущий для C/C++); Portable PDB (отдельный кроссплатформенный формат, используемый .NET/Roslyn) |
| Инструментарий создания | Компилятор MSVC (`cl.exe`) и компоновщик (`link.exe`); также создается Clang/LLVM при таргетинге на Windows с флагами компилятора `/Z7` или `/Zi` |
| Инструменты-потребители | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; инструменты анализа дампов, такие как конвертеры символов CrashPad и Breakpad |
| Поддержка серверов символов | Файлы `.pdb` индексируются по GUID + Age на сервере символов (через `symstore.exe` или совместимые серверы); отладчики загружают нужную копию по запросу, используя ключ из каталога отладки бинарного файла |
| Поддержка платформ | Нативная для Windows; кроссплатформенное чтение через инструменты LLVM (`llvm-pdbutil`, LLDB) на Linux и macOS |
| MIME-тип | application/octet-stream (нет выделенного зарегистрированного подтипа MIME) |
| Шаблон развертывания | Один `.pdb` на каждую цель сборки (`.exe` или `.dll`); распространяется как отдельный файл рядом с бинарным файлом или хранится на частном/публичном сервере символов - не встраивается в сам бинарный файл |
| Выпущен | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Последняя версия | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Открыть стандартное | Да · без роялти |
| Спецификация | github.com |
Конвертации PDB
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах PDB.
Часто задаваемые вопросы
Что такое файл PDB в Visual Studio?
Как открыть файл .pdb?
llvm-pdbutil или инструменты на базе DIA для вывода символов в виде текста.