2008-09-11 3 views
16

Ich habe einen Wrapper um einen C++ - Funktionsaufruf, den ich vom C# -Code aus rufe. Wie füge ich einen Debugger in Visual Studio an, um in den systemeigenen C++ - Code zu gelangen?Wie anfügen Debugger zu Schritt in nativem (C++) Code von einem verwalteten (C#) Wrapper?

Dies ist die Hülle, die ich habe, die GetData() aufruft, in einer C++ Datei definiert:

[DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl, 
       EntryPoint = "GetData", BestFitMapping = false)] 
     public static extern String GetData(String url); 

Der Code abstürzt und ich möchte um die Ursache zu untersuchen.

Danke, Nikhil

Antwort

22

Überprüfen Sie die Registerkarte Debuggen auf dem Eigenschaftenseite des Projekts. Es sollte ein "Enable unmanaged code debugging" Kontrollkästchen geben. Dies funktionierte für mich, als wir eine neue .NET-Benutzeroberfläche für unsere alten C++ - DLLs entwickelten.

Wenn Ihre nicht verwaltete DLL aus einem anderen Projekt erstellt wird (für eine Weile wurde unsere mit VS6 erstellt), stellen Sie sicher, dass Sie die PDB-Datei der DLL für das Debuggen zur Hand haben.

Der andere Ansatz besteht darin, die C# exe als Ziel-Exe aus dem DLL-Projekt auszuführen, können Sie dann Ihre DLL normal debuggen.

7

Zusätzlich zu Lous Empfehlung zum Starten des Debuggers können Sie auswählen, welche Debug-Engines beim Anfügen an einen vorhandenen Prozess verwendet werden, indem Sie im Dialogfeld "An Prozess anfügen" auf "Auswählen ..." klicken und beides auswählen Code 'und' nativer Code '.

Das Debuggen auf diese Art wird als Debugging im gemischten Modus bezeichnet. Sehen Sie diese blog post für einige Tipps.

Ich glaube, das wird nicht für 64-Bit-Prozesse unterstützt ... obwohl würde gerne in diesem Punkt falsch liegen.

+0

Danke für das Follow-up. Ich neige dazu, "attach to process" zu verwenden, also vergesse ich, dass es eine andere Option ist. Prost. – Lou

2

Für jeden WinDbg mit:

1> Setup Symbole

Blick auf diese Befehle. (Hilfe: in der Konsole .hh < command>)

.sympath 
.sympath+ 
.symfix 

2> Einrichten Quellpfad

.srcpath 

3> Laden extention SOS verwaltet/Mixed-Mode-Programme zu debuggen.

(Stellen Sie sicher, extention Pfad richtig eingerichtet haben)

hinzufügen Microsoft.NET \ Framework \ v2.0.50727 für x86

.extpath 

einen Haltepunkt für die clr Set using- zu laden.

sxe ld:mscorwks 

(F5/g) (Warten Sie modload BP auf mscorwks.dll)

Stellen Sie sicher, Sie nicht ein Duplikat sos extention haben bereits geladen. Siehe:

.chain 

Jetzt sind wir bereit, die sos Erweiterung zu laden.:)

.loadby sos mscorwks 

4> alle Symbole neu laden ..

.reload 

Jetzt bist du ganz eingestellt :)

(YMMV)

2

Mixed Debugging nicht in 64-Bit unterstützt wird Modus (ab Visual Studio 2008).

+0

Könnten Sie Artikel posten, die Sie zu diesem Thema haben? – Kyle

Verwandte Themen