2012-12-20 19 views
7

Ho una soluzione C++. Il progetto di avvio è un exe. Nella soluzione ci sono un numero C# dlls (targeting .NET Framework 2.0) che sono registrati per l'interoperabilità COM. Quando inserisco un breakpoint nel codice C# ottengo il breakpoint rosso vuoto con "No native symbols in symbol file"Debug C# dll dalla soluzione C++ tramite COM

Ho provato a impostare Project Property Pages -> Debugging -> Debugger Type su Misto sul progetto di avvio che chiama i metodi COM.

Ho controllato Debug -> Windows -> Modules. Ha caricato le mie DLL e lo stato del simbolo è "No native symbols in symbol file".

Questa non è la fine del mondo, perché se lo faccio Debug -> Start Without Debugging e poi Debug -> Attach to Process, cambiando il Attach To:-Managed (v2.0, v1.1, v1.0) code, Native code. Poi ho raggiunto i breakpoint sia nel codice C++ che nel codice C#.

Quindi ho una soluzione alternativa, ma penso che se posso farlo collegando al processo, dovrei riuscire a farlo solo con il debug.

Come posso raggiungere i punti di interruzione C# eseguendo semplicemente Debug -> Start Debugging?

+0

dubbio che ci sia un modo fattibile, ho provato lo stesso, e ha trascorso ore a cercare di farlo e, infine, è rimasto bloccato con l'utilizzo del Connetti a processo che funziona bene. – SinisterMJ

+0

Abbastanza corretto, non ho alcun problema con l'utilizzo di attach per elaborarlo, è solo una di quelle cose in cui non puoi lasciarlo perché pensi che "sicuramente ci dev'essere un modo" – Liam

+1

Anche io ho questo problema e immagino che sia fondamentale il problema è che "Mixed" seleziona Native + Managed (v4.0), quindi non c'è modo di selezionare Native + Managed (v2.0) dalle impostazioni di avvio. –

risposta

1

Non sono sicuro che ciò possa essere d'aiuto, ma lavoriamo molto con C# e C++. Ho trovato questo possibile inserendo il progetto C++ e il progetto C# nella stessa soluzione e abilitando il "debug nativo" nel progetto C#. Poi sono stato in grado di saltare avanti e indietro tra loro mentre eseguivo il debug.

+0

Ho entrambi i progetti nella stessa soluzione e in VS2010 ho impostato "Abilita il debug del codice non gestito" su tutti i progetti C#. Ancora non funziona. Presumo che il progetto di avvio sia un exe C++ che il debugger è impostato su nativo solo nonostante io abbia impostato il tipo di debugger su Mixed nelle proprietà del progetto C++. – Liam

4

sono stato in grado di eseguire il debug il mio C# dll da un progetto C++ in VS2008 effettuando le seguenti operazioni:

nelle proprietà del progetto C++, goto Configurazione Proprietà -> Debug. Impostare "Tipo di debugger" su Misto. "Allegare" deve essere impostato su No.

Nelle proprietà del progetto C#, nella scheda Debug, impostare "Avvia programma esterno" sul file eseguibile del progetto C++.

+1

Funziona alla grande per me! Grazie! –

2

So che è un po 'vecchio ma ho trovato una soluzione pratica per il problema.

Ho avuto lo stesso problema durante l'utilizzo di un'applicazione C++ che utilizza un oggetto COM C#. Ho provato diverse impostazioni all'interno di Visual Studio sul lato C++ e C#. Nulla è d'aiuto finché non ho provato a lanciare manualmente il Debugger.

È possibile utilizzare

Debugger.Launch(); 

avviare manualmente il debugger sul vostro C# DLL. So che questo non è il migliore ma un modo pratico. Negli ambienti produttivi successivi è necessario rimuovere la funzione di avvio di Debugger :).

saluti