2012-04-04 10 views
1

Beim Debuggen eines C++ - Projekts mit Visual Studio 2010 kann die Quelle für CRT nicht gefunden werden. Wenn ich versuche, in ein solches Modul zu gehen, wird "Keine Quelle verfügbar" angezeigt. Es bietet auch keine Option zu Browse, damit ich es helfen kann, den Quellstandort zu lokalisieren.Keine Quelle für msvcr100d.dll! __ CrtDumpMemoryLeaks()

Unter der Option Solution-> Common Properties-> Debug Source-Dateien, der richtige Speicherort für die CRT-Quelle aktualisiert.

In fehlendem Source-Level-Debugging von CRT muss ich die Disassemblierung durchlesen, die schwierig wird.

Kann mir jemand helfen herauszufinden, was schief gehen könnte?

Bitte beachten ** Ich verwende ein externes Build-System über Visual Studio, um mein C++ - Projekt zu erstellen.

Mit der Führung von Hans hier, wie ich mich auf das Problem eingrenzte.

Während der Haltepunkt noch aktiv war, habe ich alle Symbol Load Informationen aufgelistet. Ich erkannte, dass msvcr100d.i386.pdb nicht mit der DLL übereinstimmen. Es ging tatsächlich den ganzen Weg hinunter, um von dem Microsoft-öffentlichen Symbolspeicher zu holen, der natürlich die Symbole abgestreift hatte. Das war also die Ursache meines Problems.

Und hier ist ein ähnliches Problem in social.msdn

Antwort

1

Sie können die Ursache des Problems sehen, indem Sie Debug + Windows + Module verwenden, während eine Unterbrechung aktiv ist. Klicken Sie mit der rechten Maustaste auf msvcr100d.dll und wählen Sie "Symbol Load Information", um Informationen über die vom Debugger verwendete PDB zu erhalten.

Aus irgendeinem Grund liefert der Microsoft Symbol Server einen, der die Quellinformationen entfernt hat. Es ist wahrscheinlich beabsichtigt, etwas damit zu tun, dass Service- und Sicherheitspatches der DLL mit dem Quellcode in vc/crt/scr nicht mehr synchron sind. Sie können eine echte Antwort anstelle einer Schätzung erhalten, indem Sie an connect.microsoft.com senden

Eine Problemumgehung von Arten ist, Ihren Code mit/MTd anstelle von/MDd zu kompilieren, wenn das überhaupt möglich ist. Projekt + Eigenschaften, C/C++, Codegenerierung, Einstellung der Laufzeitbibliothek. Der Debugger verwendet dann die PDB-Datei in vc/lib. Behalten Sie den Ball im Auge, debuggen Sie Ihren Code anstelle der CRTs.

+0

Vielen Dank für Ihre Antwort. Es wäre ein bisschen schwierig, den Compiler-Schalter teilweise zu ändern, weil er das Verhalten ändern könnte, und zwar vollständig, weil ich ein externes Build-System verwende. Aber das zu sagen, macht für mich Sinn. Zeitstempelkonflikt könnte möglich sein. Ich denke, connect.microsoft.com wäre ideal für diese Abfrage. Danke nochmal. – Abhijit

+0

Es ist kein Zeitstempel-Mismatch. Die .pdb-Datei enthielt alle Quelldatei- und Zeileninformationen. Dies ist ansonsten ziemlich typisch für DLLs, die im Freigabemodus erstellt wurden. Alle .pdbs für die Windows-DLLs werden beispielsweise auf diese Weise ausgeliefert. Nicht zuletzt, weil Sie keinen Quellcode haben. Es ist jedoch kein Release-Modus DLL und Sie haben Quelle :) Könnte ein dummer Fehler sein, kann connect Ihnen sagen. –

+0

Bingo :-) Sie haben Recht.Ich dachte, dass Timestamp zwischen PDB und DLL nicht passt, konnte aber nicht glauben, dass sie tatsächlich die Symbole entfernt haben. Hier ist, wie ich es verifiziert von der Debug-Ausgabe 'Loaded 'C: \ Windows \ SysWOW64 \ msvcr100d.dll', Symbole geladen (Quellinformationen gestrippt) .' – Abhijit

0

Sie die Quellen für die CRT in Ihrem Installationsordner, Unterordner VC \ CRT \ SRC finden.

Wenn sie nicht da sind, haben Sie sie installiert, wenn Sie VS2010 installieren? (nicht sicher, ob Sie das wirklich wählen können).

+0

Wie ich erwähnte die Quelle ist unter VC \ CRT \ SRC vorhanden, aber IDE kann es nicht finden. Ich würde gerne wissen, wie ich IDE auf den Standort der CRT-Quelle aufmerksam machen kann – Abhijit