Frage

Ich muss eine Drittanbieterkomponente ohne Quellcode verwenden.Ich habe die Release-DLL und die Release-PDB-Datei.Nennen wir es „CorporateComponent.dll“.Mein eigener Code erstellt Objekte aus dieser DLL und ruft Methoden für diese Objekte auf.

CorpObject o = new CorpObject();
Int32 result = o.DoSomethingLousy();

Beim Debuggen löst die Methode „DoSomethingLousy“ eine Ausnahme aus.Was bringt mir die PDB-Datei?Wenn es etwas Gutes bewirkt, wie kann ich dann sicher sein, dass ich es auch nutze?

War es hilfreich?

Lösung

Um zu bestätigen, dass Sie während des Debuggens in der Visual Studio-IDE die bereitgestellte PDB „CorporateComponent.pdb“ verwenden, überprüfen Sie das Ausgabefenster und suchen Sie die Zeile, die angibt, dass „CorporateComponent.dll“ geladen ist, gefolgt von der Zeichenfolge Symbols loaded.

Zur Veranschaulichung eines meiner Projekte:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Dies zeigt an, dass die PDB vom IDE-Debugger gefunden und geladen wurde.

Wie von anderen angegeben: Wenn Sie Stapelrahmen in Ihrer Anwendung untersuchen, sollten Sie in der Lage sein, die Symbole aus der CorporateComponent.pdb zu sehen.Wenn Sie dies nicht tun, hat der Drittanbieter möglicherweise keine Symbolinformationen in den Release-PDB-Build aufgenommen.

Andere Tipps

Die PDF-Datei enthält Informationen, die der Debugger benötigt, um den Stapel korrekt zu lesen.Ihre Stack-Traces enthalten Zeilennummern und Symbolnamen der Stack-Frames innerhalb der Module, für die Sie die PDF-Datei haben.

Ich gebe zwei Anwendungsbeispiele.Die erste ist die offensichtliche Antwort.Im zweiten Abschnitt werden quellenindizierte PDFs erläutert.

1. Anwendungsbeispiel...

Abhängig von der Aufrufkonvention und den vom Compiler verwendeten Optimierungen ist es für den Debugger möglicherweise nicht möglich, den Stapel manuell über ein Modul abzuwickeln, für das Sie keine PDF-Datei haben.Dies kann bei bestimmten Bibliotheken von Drittanbietern und sogar bei einigen Teilen des Betriebssystems passieren.

Stellen Sie sich ein Szenario vor, in dem Sie auf eine Zugriffsverletzung innerhalb des Windows-Betriebssystems stoßen.Der Stack-Trace wird nicht in Ihrer eigenen Anwendung abgewickelt, da diese Betriebssystemkomponente eine spezielle Aufrufkonvention verwendet, die den Debugger verwirrt.Wenn Sie Ihren Symbolpfad zum Herunterladen der öffentlichen Betriebssystem-PDBs konfigurieren, besteht eine gute Chance, dass der Stack-Trace in Ihre Anwendung abgewickelt wird.Dadurch können Sie genau sehen, welche Argumente Ihr eigener Code an den Systemaufruf des Betriebssystems übergeben hat.(und ein ähnliches Beispiel für AV innerhalb einer Bibliothek eines Drittanbieters oder sogar innerhalb Ihres eigenen Codes)

2. Anwendungsbeispiel...

PDBs haben eine weitere sehr nützliche Eigenschaft: Sie können mithilfe einer Funktion, die Microsoft „Quellenindizierung“ nennt, in einige Versionsverwaltungssysteme integriert werden.Eine quellindizierte PDF-Datei enthält Quellcodeverwaltungsbefehle, die angeben, wie die genauen Dateiversionen, die zum Erstellen der Komponente verwendet wurden, aus der Quellcodeverwaltung abgerufen werden.Die Debugger von Microsoft verstehen, wie die Befehle ausgeführt werden, um die Dateien während einer Debug-Sitzung automatisch abzurufen.Dies ist eine leistungsstarke Funktion, die es dem Debug-Entwickler erspart, einen Quellbaum manuell mit der richtigen Bezeichnung für einen bestimmten Build zu synchronisieren.Es ist besonders nützlich für Remote-Debugging-Sitzungen und für die Post-Mortem-Analyse von Crash-Dumps.

Die Installation der „Debugging-Tools für Windows“ (windbg) enthält ein Dokument mit dem Namen srcsrv.doc, das ein Beispiel enthält, das zeigt, wie mit srctool.exe ermittelt wird, welche Quelldateien in einer bestimmten PDF-Datei quellenindiziert sind.

Um Ihre Frage „Woher weiß ich?“ zu beantworten, kann Ihnen die Funktion „Module“ im Debugger sagen, welche Module über eine entsprechende PDF-Datei verfügen.Verwenden Sie in windbg den Befehl „lml“.Wählen Sie in Visual Studio irgendwo in den Debug-Menüs Module aus.(Leider habe ich keine aktuelle Version von Visual Studio zur Hand)

Die PDB ist eine Datenbankdatei, die die Anweisungen ihren Zeilennummern im Originalcode zuordnet. Wenn Sie also einen Stack-Trace erhalten, erhalten Sie die Zeilennummern für den Code.Wenn es sich um eine nicht verwaltete DLL handelt, enthält die PDB-Datei auch die Namen der Funktionen im Stack-Trace, während diese Informationen normalerweise nur für verwaltete DLLs ohne PDBs verfügbar sind.

Das Wichtigste, was ich aus der PDF-Datei bekomme, sind Zeilennummern und echte Methodennamen für Stack-Traces.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top