Wofür ist eine PDB-Datei da?
PDB-Dateien: Was jeder Entwickler wissen muss
Beispiel für ein PDB-Szenario:
Was ist eine PDB-Datei?
Die meisten Entwickler sollten wissen, dass PDB-Dateien zur Unterstützung des Software-Debuggings verwendet werden. Aber wie genau er funktioniert, kennen wir vielleicht nicht. Dieser Artikel beschreibt die Speicherung und den Inhalt von PDB-Dateien. Er beschreibt auch, wie der Debugger die PDB-Datei findet, die binay entspricht, und wie der Debugger die Quellcodedatei findet, die binay entspricht. Dieser Artikel richtet sich an alle Native- und Managed-Entwickler.
Bevor wir beginnen, definieren wir zwei Begriffe: privater Build, der verwendet wird, um einen Build zu bezeichnen, der auf der eigenen Maschine des Entwicklers generiert wurde; Öffentlicher Build, was bedeutet, dass ein Build auf einer öffentlichen Build-Maschine generiert wird. Der private Bau ist relativ einfach, weil PDB und Binay am selben Ort sind und die Probleme meist mit öffentlichem Bau zu tun haben.
Das Wichtigste, was alle Entwickler wissen müssen, ist, dass "PDB-Dateien genauso wichtig sind wie Quellcode", ohne die man nicht einmal debuggen kann. Für einen öffentlichen Build muss der Symbolserver alle PDBs speichern, und wenn der Benutzer einen Fehler meldet, kann der Debugger automatisch die entsprechende PDB-Datei in binay finden, und sowohl Visual Studio als auch Windbg wissen, wie man auf den Symbolserver zugreift. Bevor du PDB und Binay auf den Symbolserver speicherst, musst du außerdem den PDB-Lauf als Quellindex indexieren, um PDB und Quellcode zu verknüpfen.
Der nächste Teil setzt voraus, dass die Symbolserver- und Quellserver-Indexierung bereits eingerichtet sind. TFS2010 kann so einfach wie Quellcode-Indizierung und Symbolserver-Kopierung für einen neuen Build erfolgen.
2. Der Inhalt der PDB-Akte
Offiziell startet der Inhalt von PDB, PDB ist kein öffentlich zugängliches Dateiformat, aber Microsoft stellt eine API bereit, um Daten aus PDB zu erhalten.
Das native C++ PDB enthält folgende Informationen: * öffentliche, private und statische Funktionsadressen; * Name und Adresse der globalen Variablen; * Parameter- und lokale Variablennamen sowie Offsets auf dem Stack; * Typdefinitionen von Klasse, Struktur und Daten; * Frame Pointer Auslassdaten zum Durchqueren des nativen Stacks auf x86; * Name und Anzahl der Zeilen in der Quellcodedatei;
Das .NET PDB enthält nur zwei Informationsteile: * Quellcode-Dateiname und Anzahl der Zeilen; * und dem Namen der lokalen Variablen; * Alle anderen Daten sind bereits in der enthalten. NET-Metadaten;
|