Domanda

sto parlando di un piccolo motore di gioco utilizzando C # per la programmazione del gioco. Così, ho un C ++ app incorporamento mono runtime (io lo chiamo 'lanciatore'). E ho un assembly scritto in C # che è la mia libreria di classi motore di gioco. I lanci di lancio il montaggio come viene suggerito nel Embedding Mono .

E ora la parte interessante! Gli strumenti di lancio a funzioni Vari C ++ che sono esposti al mono runtime come metodi interni delle mie classi motore di gioco. Ecco perché il mio motore di gioco di montaggio non è nulla senza il lanciatore che implementa una parte enorme del motore in C ++.

La domanda: Come faccio a eseguire il debug il mio C # montaggio? E ciò che è più importante, come faccio a eseguire il debug di un gioco che sto per scrivere in C # ???

Come avrete capito che non posso eseguire il debug l'assembly utilizzando MonoDevelop Debugger perché non riceverà le implementazioni interne C ++ di alcuni dei suoi metodi.

Che cosa ho bisogno è quello di eseguire l'avvio. Il lanciatore allora lancerà C # assemblaggio utilizzando Embedded mono runtime. E poi ho bisogno di qualcosa per la connessione al gruppo lanciato per consentire la sua debug.

o qualsiasi altro modo. Grazie!

È stato utile?

Soluzione

mi consiglia di utilizzare il Mono Soft Debugger. E 'stato incluso nel runtime Mono dal Mono 2.6, ed è più affidabile rispetto al vecchio debugger duro, e anche molto più portabile.

Il debugger morbido Mono può essere avviato da opzioni di passaggio utilizzando l'argomento --debugger-agent di comando per il runtime Mono. Questo può essere fatto da un host incorporamento costruendo una serie di argomenti falsa riga di comando e di passarlo a mono_jit_parse_options. Ad esempio, il plugin per il browser Moonlight utilizza i valori degli agenti debugger dalla variabile d'ambiente MOON_SOFT_DEBUG se impostato.

In genere debugger opzioni sono qualcosa come

--debugger-agent="transport=dt_socket,address=$ADDRESS:$PORT"

che farà sì che l'applicazione per cercare di connettersi al debugger ascolto sull'indirizzo dato, e mettere in pausa fino a quando non stabilisce una connessione. Si noti che la connessione è stabilita su TCP / IP, il che significa che il debug remoto è molto facile da configurare, e anche sul computer locale che si userebbe localhost. Ulteriori opzioni sono documentate nella pagina man di Mono.

L'altro pezzo che vi serve è il debugger GUI / regolatore, ad ascoltare per la connessione dalla tua applicazione, e manico stepping / visualizzazione, ecc vi suggerirei di usare MonoDevelop. C'è una biblioteca per il protocollo filo debugger chiamato Mono.Debugger.Soft.dll, ma è piuttosto basso livello, e anche se Mono Tools per Visual Studio supporti di collegamento al debugger morbida, non è ancora estendibile in un modo che permettesse di debug Mono embedding padroni di casa.

Utilizzo di MonoDevelop per accettare connessioni debugger da host embedding attualmente richiede la creazione di un componente aggiuntivo, ma questo è abbastanza semplice. Date un'occhiata alla Moonlight debugger Addin per un esempio. Per semplici casi di utilizzo Vorrei suggerire che non si definisce un nuovo tipo di progetto, ma solo crea un gestore di debug che maniglie progetti DotNetExecutionCommand esistente, in modo da poter run-> correre con ...-> il debugger personalizzato .

Il MonoDevelop-list mailing list è una risorsa va bene se avete altre domande .

Altri suggerimenti

Fare uso di debug di rete.

Si potrebbe utilizzare il morbida Debugger per eseguire il debug delle parti Mono , e quindi utilizzare parti debug remoto per il C ++ .

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