Frage

Ich arbeite mit gemischten Modusanordnungen in C ++ / CLI. Der gesamte verwaltete Modus montierte PDBs werden geladen, wenn er in der Mischmodus-Baugruppe erfolgreich, aber native DLLs und PDBs werden jedoch nicht geladen, obwohl die Informationen der nativen PDBs in der Module-Fenster (dh in VS-Debug-> Windows-> -Module) angezeigt werden. < / p>

Ich verwende native DLL und rufen Sie die exportierte Funktion in gemischter Montage in C ++ / Cli-Code an. Hier werden Funktionen erfolgreich angerufen, aber native PDB-Symbole werden nicht geladen, und alle Haltepunkte im nativen Code werden als Hohlkreis und Werkzeugtipps angezeigt. Es gibt keine dafür geladenen Symbole.

Ich habe alles getan, PDB in dem aktuellen Verzeichnis, an dem der verwaltete Prozess gestartet wird; Gelöscht alle OBJ- und Debug-Ordner und werden jedes Projekt gleichzeitig neu kompiliert. Ich habe sogar das CHKMatch-Dienstprogramm verwendet, das zeigt, dass die Symbole in der EXE- und entsprechenden PDB-Übereinstimmung angezeigt werden.

Gibt es eine Möglichkeit, Haltepunkte des nativen Codes während des Anrufs des verwalteten (C ++ / LCI-Mixed-Modus) -Codes zu aktivieren?

grüße,

usman

War es hilfreich?

Lösung

Das Mischmodus-Debugging kann getroffen und vermissen, meist vermissen.Stellen Sie zunächst sicher, dass Sie tatsächlich ein Mixed-Modus-Debugging aktiviert haben.Von einem C # -Projekt handelt es sich um Projekt + Eigenschaften, Debugg, aktiviertes Kontrollkästchen des nicht verwalteten Codes debugging.Als nächstes ist das Mixed-Modus-Debugging für 64-Bit-Prozesse nicht aktiviert.Wenn Sie auf einem 64-Bit-Betriebssystem ausgeführt werden, stellen Sie sicher, dass Sie die .exe zwingen, im 32-Bit-Modus auszuführen.Projekt + Eigenschaften, Registerkarte erstellen, Plattformziel= x86.

Weiter Überprüfen Sie, wo der Debugger nach den .pdb-Dateien gesucht hat.Klicken Sie mit der rechten Maustaste auf das Fenster Debug + Windows + Modules mit der rechten Maustaste auf die DLL und wählen Sie "Symbollastinformationen".Endgaspe ist es, __debugbreak () im nicht verwalteten Code zu verwenden.


update: Letzte Versionen von VS (beginnend mit VS2012) verfügen über einen neuen verwalteten Debugging-Motor, der mit dem nicht verwalteten Debugging-Motor nicht kompatibel ist.Tools> Optionen> Debugging> Allgemein, Tick "Verwaltungsgerechter Kompatibilitätsmodus verwenden".Es ermöglicht das ältere Debugging-Motor, der zuletzt in VS2010 verwendet wird.

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