Sto provando a eseguire il debug di una DLL C# da un eseguibile C++ nativo. Ho un oggetto COM C# che viene caricato ed eseguito da codice nativo tramite IDispatch. Tutto è costruito in Debug, sia in C# che in C++. Mentre posso vedere tutto il codice C++, e tutte le DLL C++ hanno i loro simboli caricati e disponibili per il debug, i breakpoint ecc. Il codice C# si rifiuta di giocare."skipped loading symbols for ngen binary" per C# dll
Quello che vedo è che le DLL di C# si rifiutano di caricare il loro simbolo pdbs, riportando "simboli di caricamento saltati per binario ngen" nella finestra dei moduli.
Per inciso, sto eseguendo il debug della soluzione C# qui, ho impostato l'eseguibile nativo come 'start programma esterno' nelle impostazioni di debug del progetto COM.
Ora posso avviare l'eseguibile C++ e quindi collegarlo a esso, quindi tutto funziona come previsto - i simboli si caricano e posso impostare i punti di interruzione nel C#.
Si sta utilizzando Visual Studio 2013u4. Esiste un'impostazione per abilitare il debug in modalità mista? Un problema è che il codice nativo è stato creato con VS2010.
Ecco la finestra del modulo - di notare tutte le PDBs e DLL sono in una singola directory, è possibile vedere le DLL C++ caricati, ma non i C# quelli.
Ecco la finestra moduli - nota il 3 ° voce per il dll EVCom (l'oggetto COM) che presumo sia la voce che permette il debug.
Non c'è nulla di interessante nella finestra di output, quando si tratta di caricare la DLL COM, vedo quanto segue (nel caso di allegare al processo in esecuzione, l'altro ha solo 2 righe caricate invece di 3).
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
'Explorer.exe' (Win32): Unloaded 'C:\...\lib\debug\EvCom.dll'
'Explorer.exe' (Win32): Loaded 'C:\Dev\...\lib\debug\EvCom.dll'.
Una cosa di interesse - ho controllato il "Usa Managed Compatibility Mode" nelle impostazioni di debug e, pensava che ancora non viene caricato i miei simboli quando si avvia il debug, mostra solo 1 voce nella lista dei moduli. Questa volta dire "Nessun simbolo nativo nel file di simboli" per le DLL di C#.
Sembra che il problema non sia la possibilità di selezionare il tipo di debugger in VS2013 (o 2012). This connect article suggerisce "design" con alcuni accorgimenti.
progetto Fare clic con il C++, Proprietà, debug, debugger Type = misto. –
Non esiste un progetto C++, sto eseguendo il debug del mio progetto C# in VS2013, e non c'è nessuna impostazione di questo tipo, il progetto nativo è costruito esternamente e non è referenziato all'interno di VS come progetto. – gbjbaanb
"Posso vedere tutto il codice C++" è ... strano allora. È già necessario attivare il debug in modalità mista, l'unico modo per vedere il codice C++. Concentrati sull'avvertimento strano sui binari ngen, non è normale. Non dovresti mai eseguire il debug del codice. Eseguire ngen/uninstall per sbarazzarsi di esso. –