Domanda

Ho un wrapper C++ la funzione di chiamata con la quale ho chiamata da codice C#.Come posso allegare un debugger di Visual Studio per il passaggio nel codice nativo C++?

Questo è il wrapper che ho, che chiama GetData() definita in un file C++:

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

Il codice si blocca e mi vuole indagare la causa principale.

Grazie, Nikhil

È stato utile?

Soluzione

Controllare la scheda di Debug del vostro progetto pagina delle proprietà.Ci dovrebbe essere un "Abilita il codice non gestito debug" casella di controllo.Questo ha funzionato per me, quando abbiamo sviluppato una nuova .NETTO UI per il nostro vecchio c++ Dll.

Se non gestito DLL è stato costruito da un altro progetto (per un po ' la nostra, sono state costruite utilizzando VS6) basta assicurarsi di avere la DLL file pdb utile per il debug.

L'altro approccio è quello di utilizzare il C# exe come destinazione exe per eseguire il progetto DLL, è quindi possibile eseguire il debug DLL normalmente.

Altri suggerimenti

oltre a Lou consigli per avviare il debugger, è possibile selezionare debug motori sono utilizzati in caso di collegamento ad un processo esistenti, cliccando su "Seleziona..." nella finestra " connetti a processo di dialogo e di scegliere entrambi 'di codice gestito' e 'codice nativo'.

Debug in questo modo è chiamato debug in modalità mista.Vedere questo post del blog per alcuni suggerimenti.

Credo che questo non è supportato per la versione a 64 bit processi ...se piacerebbe essere sbagliato su questo punto.

Per chiunque utilizzando WinDbg:

1>Installazione di simboli

Guardate questi comandi.(Aiuto:in console .hh < comando> )

.sympath
.sympath+ 
.symfix

2>Impostare il percorso di origine

.srcpath

3>Carico SOS extention per il debug gestito / modalità mista programmi.

(Assicurati di avere estensione del percorso di installazione correttamente)

Aggiungi Microsoft.NET\Framework\v2.0.50727 per x86 che utilizza-

.extpath 

Impostare un punto di interruzione per il clr di carico.

sxe ld:mscorwks

(F5 / g) (Attendere ModLoad BP mscorwks.dll)

Assicurarsi di che non avere un duplicato sos extention già caricato.Vedere:

.chain

Ora siamo pronti per caricare il sos per estensione.:)

.loadby sos mscorwks

4> Ricaricare tutti i simboli..

.reload

Ora è tutto pronto :)

(YMMV)

Misto di debug non è supportata in modalità 64bit (come di Visual Studio 2008).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top