Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Datei ist pdb?

Welche Datei ist pdb?

青灯夜游
青灯夜游Original
2020-07-28 11:27:2936759Durchsuche

pdb bezieht sich auf die Datei „Programmdatenbank“, eine Datei, die beim Kompilieren und Verknüpfen von VS generiert wird. In der DPB-Datei werden hauptsächlich die grundlegenden Informationen gespeichert, die VS beim Debuggen des Programms benötigt, einschließlich Quelldateiname, Variablenname, Funktionsname, FPO, entsprechende Zeilennummer usw. Die PDB-Datei wird beim Kompilieren des Projekts generiert und zusammen mit dem entsprechenden Modul generiert.

Welche Datei ist pdb?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Dell G3-Computer.

PDB (Program DataBase), der vollständige Name lautet „Program Database“-Datei, eine Datei, die beim Kompilieren und Verknüpfen von VS generiert wird. In der DPB-Datei werden hauptsächlich die grundlegenden Informationen gespeichert, die VS beim Debuggen des Programms benötigt, einschließlich Quelldateiname, Variablenname, Funktionsname, FPO (Frame-Zeiger), entsprechende Zeilennummer usw. Da Debugging-Informationen gespeichert werden, werden PDB-Dateien im Allgemeinen im Debug-Modus generiert.

Die PDB-Datei zeichnet die relevanten Informationen des Quelldateipfads auf, sodass beim Laden der PDB-Datei die relevanten Debugging-Informationen mit dem Quellcode abgeglichen werden können. Dadurch können Sie Funktionsaufrufe, Variablenwerte und andere zugehörige Informationen während des Debuggens in Echtzeit visuell anzeigen. Die im Modul aufgezeichnete PDB-Datei ist ein absoluter Pfad. Solange das Modul auf dem aktuellen Computer geladen ist, findet der Debugger natürlich die entsprechende PDB-Datei anhand der Pfadinformationen im Modul und lädt sie. Ebenso ist der in der PDB-Datei aufgezeichnete Quelldateipfad ebenfalls ein absoluter Pfad. Solange die PDB-Datei also auf dem aktuellen Computer geladen und im entsprechenden Modul debuggt wird, kann sie mit der aufgezeichneten Quelldatei übereinstimmen und dann visuell angezeigt werden entsprechende Informationen.

Wann wird die PDB-Datei generiert?

Die PDB-Datei wird beim Kompilieren des Projekts generiert. Sie wird zusammen mit dem entsprechenden Modul (exe oder dll) generiert. Im Allgemeinen ist uns die Bedeutung von PDB-Dateien möglicherweise nicht bewusst, denn wenn wir nur lokal entwickeln, können wir jederzeit Anpassungen vornehmen. Hier möchte ich zwei Konzepte vorstellen: Private Build und Public Build1. Private Build bezieht sich auf die Kompilierung auf dem Entwicklungscomputer, und Public Build bezieht sich auf die Kompilierung auf dem Computer, der für die Kompilierung verantwortlich ist.

Wie ich oben sagte, gibt es im Allgemeinen kein Problem mit Private Build, da alle notwendigen Dateien zum Debuggen auf dem kompilierten Rechner dort sind, wo sie sein sollten. Die meisten Probleme, die nicht debuggt werden können, treten bei Public Build auf.

Wenn Ihre Anwendung als Produkt veröffentlicht oder verkauft werden muss, müssen Sie besonders darauf achten, die PDB-Datei und die Quelldatei der von Ihnen veröffentlichten Version zu speichern. Hinweis: Sie haben nur eine Chance, die veröffentlichte PDB-Datei zu speichern. Wenn Sie sie verlieren, können Sie sie nicht wiederherstellen. 2 (Die Gründe werden unten erläutert)

Warum ist PDB so wichtig?

Vielleicht Sie Ich werde denken, dass Sie einfach eine PDB-Datei mit genau demselben Quellcode neu kompilieren und sie dann zum Debuggen verwenden. Früher dachte ich so, bis eines Tages ...

Der direkte Grund liegt darin, dass der Header-Teil der von VS generierten Binärdatei die GUID der entsprechenden PDB enthält und die PDB auch eine GUIID enthält Während der Kompilierung werden zwei GUIDs hinzugefügt. Der VS-Debugger vergleicht die beiden GUIDs beim Laden der PDB. Wenn sie inkonsistent sind, können sie nicht verwendet werden.

Natürlich ist der obige Grund nur ein oberflächliches Phänomen. Der Hauptgrund ist, dass die vom Compiler kompilierten Dateien sich von zwei identischen Codes unterscheiden können. Da der Compiler den Code beim Kompilieren optimiert und derselbe Code möglicherweise über viele Optimierungsmethoden verfügt, wählt er die schnellste Generierungsmethode basierend auf der jeweiligen Maschinenumgebung zu diesem Zeitpunkt aus. Daher können die generierten Dateien unterschiedlich sein! Wenn also sogar die generierten Dateien unterschiedlich sind, sind die Adressen, die den Symbolen in der ursprünglichen PDB entsprechen, bedeutungslos.

Wie kann ich die GUID von Binärdateien und PDBs anzeigen?

Verwenden Sie das mit VS gelieferte DUMPBIN-Tool, um die GUID der PDB anzuzeigen, die von der Binärdatei erwartet wird. Die grundlegende Verwendung ist die Datei DUMPBIN /HEADER. Informationen zur spezifischen Verwendung finden Sie in MSDN (http://msdn.microsoft.com/zh-cn/library/c1h23y6c(v=vs.80).aspx).

Um die GUID der PDB anzuzeigen, können Sie das folgende Tool verwenden und die PDB direkt einlesen.

http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

Suchstrategie für PDB-Dateien

Sehen wir uns zunächst die Testergebnisse an. Anschließend können Sie während des Debuggens die Suchstrategie für das Symbol eines Moduls über den seriellen Modulport von Visual Studio finden. Auf dem Screenshot können wir die Ergebnisse wie folgt sehen:

Welche Datei ist pdb?

1 Die Adresse, an der die Datei ausgeführt oder geladen wird

2 in der PE-Datei die Adresse im Header. Wie Sie sehen, ist obj die ursprünglich generierte Adresse, sie wurde jedoch später auf die erste Adresse kopiert.

2.5 Wenn ein Symbolserver konfiguriert ist, sollten Sie nach dem zweiten Schritt zunächst im Cache-Verzeichnis des Symbolservers suchen. Wenn Sie ihn nicht finden können, gehen Sie zum Symbolserver, um ihn zu finden. Wenn es gefunden wird, wird es in das Cache-Verzeichnis heruntergeladen.

3. Der dritte Teil sind die Verzeichnisse für einige in meinem VS festgelegte Symbolabfragen. Da ich Reflector installiert habe, werden diese Verzeichnisse standardmäßig zu meinen Einstellungen hinzugefügt.

4. Windows-Ordner.

Ein interessantes Phänomen hierbei ist, dass die Suchstrategie von VS zuerst symbolexeproject.pdb in einem Verzeichnis findet, dann exeproject.pdb und schließlich project.pdb. Diese Reihenfolge ist etwas überraschend.

Beeinträchtigen PDB-Dateien die Leistung?

Einige Leute denken möglicherweise, dass die Generierung von PDB-Dateien einen gewissen Einfluss auf die Leistung der endgültigen Anwendung haben wird, und sind daher der Meinung, dass PDB-Dateien in der Release-Version nicht generiert werden sollten.

Falsch! Bei .NET-Anwendungen wirkt sich das Generieren von PDB-Dateien nicht auf die Optimierung des Compilers aus, sodass die Leistung der Anwendung überhaupt nicht beeinträchtigt wird. Es wirkt sich nur auf ein DebugableAttribute-Attribut in der generierten Assembly aus. Interessierte können Do PDB Files Affect Performance? lesen.

Empfehlungen für entsprechende Video-Tutorials: „ASP.NET-Tutorial

Das obige ist der detaillierte Inhalt vonWelche Datei ist pdb?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn