Warum generiert Visual Studio 2005 die .pdb
Dateien beim Kompilieren in der Version? Ich werde keinen Release-Build debuggen. Warum werden sie generiert?
.net
visual-studio
debugging
pdb-files
debug-symbols
m.edmondson
quelle
quelle
Antworten:
Denn ohne die PDB-Dateien wäre es unmöglich, einen "Release" -Build durch etwas anderes als das Debuggen auf Adressenebene zu debuggen. Optimierungen machen wirklich eine Nummer in Ihrem Code, was es sehr schwierig macht, den Schuldigen zu finden, wenn etwas schief geht (z. B. wird eine Ausnahme ausgelöst). Selbst das Setzen von Haltepunkten ist äußerst schwierig, da Quellcodezeilen nicht eins zu eins mit dem generierten Assemblycode (oder sogar in derselben Reihenfolge wie dieser) abgeglichen werden können. PDB-Dateien helfen Ihnen und dem Debugger und erleichtern das Post-Mortem-Debugging erheblich.
Sie weisen darauf hin, dass Sie, wenn Ihre Software zur Veröffentlichung bereit ist, bis dahin alle Fehlerbehebungen durchgeführt haben sollten. Das ist sicherlich richtig, aber es gibt ein paar wichtige Punkte zu beachten:
Sie sollten Ihre Anwendung auch testen und debuggen (bevor Sie sie veröffentlichen), indem Sie den Build "Release" verwenden. Dies liegt daran, dass das Aktivieren von Optimierungen (die in der "Debug" -Konfiguration standardmäßig deaktiviert sind) manchmal zu subtilen Fehlern führen kann, die Sie sonst nicht abfangen würden. Wenn Sie dieses Debugging durchführen, möchten Sie die PDB-Symbole.
Kunden melden häufig Randfälle und Fehler, die nur unter "idealen" Bedingungen auftreten. Dies sind Dinge, die im Labor kaum reproduzierbar sind, da sie auf einer verrückten Konfiguration des Computers dieses Benutzers beruhen. Wenn sie besonders hilfreiche Kunden sind, melden sie die ausgelöste Ausnahme und stellen Ihnen eine Stapelverfolgung zur Verfügung. Oder Sie können sogar ihren Computer ausleihen, um Ihre Software remote zu debuggen. In beiden Fällen möchten Sie, dass die PDB-Dateien Sie unterstützen.
Die Profilerstellung sollte immer bei "Release" -Builds mit aktivierten Optimierungen erfolgen. Und wieder einmal sind die PDB-Dateien nützlich, da sie es ermöglichen, die zu profilierenden Montageanweisungen wieder dem Quellcode zuzuordnen, den Sie tatsächlich geschrieben haben.
Sie können die PDB-Dateien nach dem Kompilieren nicht mehr zurückgeben . * Wenn Sie sie während des Builds nicht erstellen, haben Sie Ihre Chance verloren. Es tut nichts weh, sie zu erschaffen. Wenn Sie sie nicht verteilen möchten, können Sie sie einfach in Ihren Binärdateien weglassen. Aber wenn Sie später entscheiden, dass Sie sie wollen, haben Sie kein Glück. Es ist besser, sie immer zu generieren und eine Kopie zu archivieren, falls Sie sie jemals brauchen.
Wenn Sie sie wirklich ausschalten möchten, ist dies immer eine Option. Setzen Sie im Eigenschaftenfenster Ihres Projekts die Option "Debug Info" für jede Konfiguration, die Sie ändern möchten, auf "none".
Zu beachten ist jedoch, dass die „Debug“ und „Release“ Konfigurationen tun standardmäßig verwenden unterschiedliche Einstellungen für die Debug - Informationen aussendet. Sie möchten diese Einstellung beibehalten. Die Option "Debug Info" ist für einen Debug-Build auf "full" gesetzt. Dies bedeutet, dass zusätzlich zu einer PDB-Datei Debugging-Symbolinformationen in die Assembly eingebettet werden. Sie erhalten auch Symbole, die coole Funktionen wie Bearbeiten und Fortfahren unterstützen. Im Freigabemodus ist die Option "Nur PDF" ausgewählt, die, wie es sich anhört, nur die PDB-Datei enthält, ohne den Inhalt der Assembly zu beeinflussen. Es ist also nicht ganz so einfach wie das bloße Vorhandensein oder Fehlen von PDB-Dateien in Ihrem
/bin
Verzeichnis. Angenommen, Sie verwenden die Option "Nur pdb", die PDB-Datei '* Wie Marc Sherman in einem Kommentar ausführt , können Sie ihn neu erstellen und eine passende PDB-Datei generieren, solange sich Ihr Quellcode nicht geändert hat (oder Sie den Originalcode von einem Versionskontrollsystem abrufen können). Zumindest normalerweise. Das funktioniert gut , die meiste Zeit, aber der Compiler nicht gewährleistet ist identisch Binärdateien jedes Mal erzeugen Sie den gleichen Code kompilieren , so dass es möglicherweise feine Unterschiede sein. Schlimmer noch, wenn Sie in der Zwischenzeit Upgrades an Ihrer Toolchain vorgenommen haben (z. B. das Anwenden eines Service Packs für Visual Studio), ist die Wahrscheinlichkeit, dass die PDBs übereinstimmen, noch geringer. Um die zuverlässige Erzeugung von Ex-post-Facto zu gewährleistenBei PDB-Dateien müssten Sie nicht nur den Quellcode in Ihrem Versionskontrollsystem archivieren, sondern auch die Binärdateien für Ihre gesamte Build-Toolchain, um sicherzustellen, dass Sie die Konfiguration Ihrer Build-Umgebung präzise neu erstellen können. Es versteht sich von selbst, dass es viel einfacher ist, die PDB-Dateien einfach zu erstellen und zu archivieren.
quelle
.reload /i foo.dll
. Dadurch wird foo.pdb geladen, auch wenn foo.pdb nach der Veröffentlichung von foo.dll erstellt wurde.PDB kann sowohl für
Release
als auch für generiert werdenDebug
. Dies ist eingestellt auf (in VS2010, aber in VS2005 muss es ähnlich sein):Ändern Sie es einfach in
None
.quelle
FileNotFoundException
), aber Sie können keine Stapelverfolgung sehen. Das macht es sehr schwierig , genau zu fassen , welche Zeile von Code der Ausnahme ausgelöst werden , verursacht.Ohne die .pdb-Dateien ist es praktisch unmöglich, den Produktionscode zu durchlaufen. Sie müssen sich auf andere Tools verlassen, die teuer und zeitaufwändig sein können. Ich verstehe, dass Sie zum Beispiel Tracing oder Windbg verwenden können, aber es hängt wirklich davon ab, was Sie erreichen möchten. In bestimmten Szenarien möchten Sie nur den Remote-Code (keine Fehler oder Ausnahmen) mithilfe der Produktionsdaten durchlaufen, um ein bestimmtes Verhalten zu beobachten. Hier bieten sich PDF-Dateien an. Ohne sie ist es unmöglich, den Debugger für diesen Code auszuführen.
quelle
Warum sind Sie so sicher, dass Sie Release-Builds nicht debuggen werden? Manchmal (hoffentlich selten, aber passiert) erhalten Sie möglicherweise einen Fehlerbericht von einem Kunden, der aus irgendeinem Grund (unterschiedliche Zeitpunkte, kleines unterschiedliches Verhalten oder was auch immer) in der Debug-Version nicht reproduzierbar ist. Wenn dieses Problem im Release-Build reproduzierbar zu sein scheint, freuen Sie sich über die passende PDF-Datei.
quelle
Sie können auch Crash-Dumps verwenden, um Ihre Software zu debuggen. Der Kunde sendet es Ihnen und Sie können es verwenden, um die genaue Version Ihrer Quelle zu identifizieren - und Visual Studio ruft mithilfe des Absturzabbausatzes sogar die richtigen Debugging-Symbole (und die Quelle, wenn Sie richtig eingerichtet sind) ab. Weitere Informationen finden Sie in der Microsoft- Dokumentation zu Symbolspeichern .
quelle
.PDB-Datei ist der Kurzname von "Program Database". Es enthält die Informationen zum Debug-Punkt für den Debugger und die verwendeten Ressourcen oder Referenzen. Es wird generiert, wenn wir als Debug-Modus erstellen. Es ermöglicht der Anwendung, zur Laufzeit zu debuggen.
Die Größe der PDF-Datei wird im Debug-Modus erhöht. Es wird verwendet, wenn wir unsere Anwendung testen.
Guter Artikel der PDF-Datei.
http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P
quelle
In einer Multiprojektlösung möchten Sie normalerweise eine Konfiguration haben, die überhaupt keine PDB- oder XML-Dateien generiert. Anstatt die
Debug Info
Eigenschaft jedes Projekts in zu ändernnone
, hielt ich es für zweckmäßiger, ein Post-Build-Ereignis hinzuzufügen, das nur in einer bestimmten Konfiguration funktioniert.Leider können Sie in Visual Studio keine unterschiedlichen Post-Build-Ereignisse für unterschiedliche Konfigurationen angeben. Deshalb habe ich mich dazu entschlossen, die
csproj
Datei des Startprojekts zu bearbeiten und Folgendes hinzuzufügen (anstelle eines vorhandenenPostBuildEvent
Tags):Leider wird dadurch das Textfeld für das Ereignis nach dem Erstellen leer, und das Einfügen von Daten kann zu unvorhersehbaren Ergebnissen führen.
quelle
*.xml
Dateien gelöscht. Seien Sie vorsichtig damit.Debug-Symbole ( .pdb) und XML-Dokumentdateien ( .xml) machen einen großen Prozentsatz der Gesamtgröße aus und sollten nicht Teil des regulären Bereitstellungspakets sein. Es sollte jedoch möglich sein, auf sie zuzugreifen, falls sie benötigt werden.
Ein möglicher Ansatz: Verschieben Sie sie am Ende des TFS-Erstellungsprozesses in ein separates Artefakt.
quelle
Ohne PDB-Dateien und symbolische Informationen wäre es unmöglich, einen erfolgreichen Absturzbericht (Speicherauszugsdateien) zu erstellen, und Microsoft hätte nicht das vollständige Bild, das das Problem verursacht hat.
Mit PDB wird die Crash-Berichterstattung verbessert.
quelle