Wie Debugger anhängen in nativer (C ++) Code von einem verwalteten (C #) Wrapper zu Schritt?

StackOverflow https://stackoverflow.com/questions/57840

Frage

Ich habe ein Wrapper um eine C ++ Funktionsaufruf, die ich von C # Code aufrufen. Wie befestige ich einen Debugger in Visual Studio in den nativen C ++ Code zu Schritt?

Dies ist der Wrapper, ich habe die Anrufe GetData (), die in einer C ++ Datei:

    [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

War es hilfreich?

Lösung

Überprüfen Sie die Registerkarte Debuggen auf Projekteigenschaften Seite. Es sollte eine „Enable nicht verwalteten Code-Debugging“ Checkbox sein. Das funktionierte für mich, wenn wir eine neue .NET UI für unsere alten c ++ DLLs entwickelt.

Wenn Ihr nicht verwalteten DLL aus einem anderen Projekt gebaut wird (für eine Weile unsere wurden VS6 mit gebaut) nur sicherstellen, dass Sie die DLL-PDB-Datei praktisch für die Fehlersuche haben.

Der andere Ansatz ist es, die C # exe als Ziel exe zu verwenden, aus dem DLL-Projekt auszuführen, können Sie dann Ihre DLL debuggen normal.

Andere Tipps

zusätzlich zu Lous Beratung für den Debugger starten, können Sie auswählen, welche Debug-Motoren verwendet werden, wenn zu einem bestehenden Verfahren Befestigung, indem Sie auf ‚Wählen Sie ...‘ im Dialog ‚anhängen bearbeiten‘ und wählen Sie beide ‚verwalteten Code 'und 'nativen Code'.

Debugging auf diese Weise gemischten Modus Debuggen genannt. Sehen Sie diese Blog-Post einige Tipps.

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

Für jeden mit WinDbg:

1> Setup Symbole

Sehen sie sich diese Befehle. (Hilfe: in der Konsole .hh )

.sympath
.sympath+ 
.symfix

2> Einrichten Quellpfad

.srcpath

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

(Achten Sie darauf, extention Pfad Setup richtig)

Fügen Sie Microsoft.NET \ Framework \ v2.0.50727 für x86 mit -

.extpath 

Setzen Sie einen Haltepunkt für die CLR geladen werden.

sxe ld:mscorwks

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

Stellen Sie sicher, dass Sie nicht eine doppelte sos extention haben bereits geladen. Siehe auch:

.chain

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

.loadby sos mscorwks

4> Neu laden alle Symbole ..

.reload

Jetzt sind Sie alle gesetzt:)

(YMMV)

Mixed Debugging ist nicht im 64-Bit-Modus unterstützt (wie von Visual Studio 2008).

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