Co to jest format pliku PDB?
Pliki .pdb zawierają bazę danych programu - konkretnie ustrukturyzowany magazyn symboli debugowania, mapowań plików źródłowych i informacji o typach wygenerowanych przez zestaw narzędzi Microsoft Visual C++. Są one używane razem z pasującymi plikami .exe lub .dll, z których zostały skompilowane; nie są osadzone wewnątrz tych plików binarnych, lecz dystrybuowane jako oddzielne pliki.
Informacje o debugowaniu
Symbole debugowania przechowywane w plikach .pdb pozwalają debuggerom przekazywać ważne informacje o wyjątkach, mapować adresy pamięci z powrotem na numery linii plików źródłowych oraz ujawniać nazwy funkcji i zmiennych, które są usuwane z końcowego pliku binarnego. Są one pomocne podczas rozwiązywania problemów z programem i adresowania błędów zarówno w środowisku programistycznym, jak i produkcyjnym.
Jak powstają pliki .pdb
Pliki .pdb są generowane z plików źródłowych podczas procesu kompilacji przez kompilator MSVC (cl.exe) i linker (link.exe). *Nie* są one produktem kompilacji Just-In-Time (JIT) - jest to powszechne błędne przekonanie. Nowoczesne pliki .pdb używają kontenera binarnego MSF 7.00 (Multi-Stream File) wprowadzonego wraz z Visual Studio .NET. Każdy .pdb jest powiązany ze swoim plikiem binarnym za pomocą identyfikatora GUID i licznika Age; plik .pdb z innej kompilacji nie zostanie załadowany. Ponieważ format jest własnościowy, tylko dedykowane narzędzia, takie jak Visual Studio, WinDbg lub llvm-pdbutil, mogą je odczytać, choć Microsoft opublikował implementację referencyjną.
Bezpieczeństwo
RYZYKO: LOWPDB to pasywne dane odczytywane przez debuggery - nie zawiera kodu wykonywalnego, więc otwarcie go jest bezpieczne. Prawdziwym problemem jest poufność, a nie złośliwe oprogramowanie: PDB ujawnia wewnętrzne nazwy funkcji, ścieżki plików źródłowych i strukturę kodu, więc udostępnienie lub wyciek pliku ujawnia informacje o wnętrzu oprogramowania (przydatne dla inżynierii wstecznej). Przechowuj pliki PDB wersji produkcyjnych na prywatnym serwerze symboli, zamiast dołączać je do produktu.
Szczegóły formatu
w pigułce- Baza danych Palm OS (książka PalmPilot / eReader) - Baza danych PRC/PDB Palm - e-booki i dane aplikacji PDA (nagłówek '...' pod offsetem 0x3C); otwierane przez narzędzia Palm/eReader, nie przez Visual Studio.
- Struktura molekularna Protein Data Bank - Plik tekstowy PDB opisujący trójwymiarowe współrzędne atomowe cząsteczki; otwierany przez PyMOL/Chimera/Jmol.
- Dane cen/portfela Quicken (.pdb) - Intuit Quicken zapisywał plik danych .pdb - znaczenie, do którego baza danych błędnie przypisała program otwierający 'Quicken'.
Programy otwierające pliki PDB
Szczegóły techniczne
specyfikacja| Format kontenera | MSF (Multi-Stream File) - wewnętrzny kontener strumieni oparty na stronach, który przechowuje wiele nazwanych strumieni danych w jednym pliku |
| Sygnatura pliku (magic bytes) | Zaczyna się od ciągu ASCII `Microsoft C/C++ MSF 7.00`, po którym następuje CR LF i określone bajty kontrolne pod offsetem 0; starsze pliki PDB 2.0 zaczynają się od `Microsoft C/C++ program database 2.00` |
| Kodowanie | Binarne, porządek bajtów little-endian w całym pliku |
| Strumienie wewnętrzne | DBI (Debug Information), TPI/IPI (rekordy typów i ID), strumienie symboli publicznych i globalnych, strumienie symboli dla poszczególnych modułów oraz tabele mapowania źródeł/numerów linii |
| Klucz powiązania binarnego | GUID + licznik Age zapisany zarówno w `.pdb`, jak i w katalogu debugowania sparowanego pliku `.exe` lub `.dll`; niezgodność powoduje odrzucenie pliku symboli przez debugger |
| Typowy rozmiar pliku | Od 100 KB do 500 MB; duże natywne projekty C++ rutynowo generują pliki `.pdb` o rozmiarze setek megabajtów |
| Kompresja | Brak - dane mają strukturę stronicową, ale nie są skompresowane |
| Rozmiar strony | Strony 4 KB w MSF 7.00 (BigMsf); starszy kontener MSF 2.0 używał mniejszych rozmiarów stron |
| Warianty formatu | PDB 2.00 (starsza sygnatura JG, MSVC 6.0 i wcześniejsze); MSF 7.00 / BigMsf (Visual Studio .NET i nowsze, obecny dla C/C++); Portable PDB (oddzielny format wieloplatformowy używany przez .NET/Roslyn) |
| Zestaw narzędzi producenta | Kompilator MSVC (`cl.exe`) i linker (`link.exe`); emitowany również przez Clang/LLVM przy targetowaniu Windows z flagami kompilatora `/Z7` lub `/Zi` |
| Narzędzia konsumenckie | Visual Studio Debugger, WinDbg, DIA SDK, `llvm-pdbutil`, `dumpbin`; narzędzia do analizy awarii, takie jak konwertery symboli CrashPad i Breakpad |
| Obsługa serwera symboli | Pliki `.pdb` są indeksowane przez GUID + Age na serwerze symboli (poprzez `symstore.exe` lub kompatybilne serwery); debuggery pobierają poprawną kopię na żądanie, używając klucza z katalogu debugowania pliku binarnego |
| Obsługa platform | Natywna w Windows; odczyt wieloplatformowy za pomocą narzędzi LLVM (`llvm-pdbutil`, LLDB) w systemach Linux i macOS |
| Typ MIME | application/octet-stream (brak dedykowanego zarejestrowanego podtypu MIME) |
| Wzorzec wdrażania | Jeden `.pdb` na cel kompilacji (`.exe` lub `.dll`); dystrybuowany jako oddzielny plik obok pliku binarnego lub przechowywany na prywatnym/publicznym serwerze symboli - nie jest osadzony w samym pliku binarnym |
| Wydano | 1990s (Microsoft Visual C++); MSF 7.00 container since Visual Studio .NET era |
| Najnowsza wersja | MSF 7.00 ('BigMsf'); portable PDB used by .NET/Roslyn alongside it |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | github.com |
Konwersje PDB
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki PDB.