Question

Je parle d'un petit moteur de jeu en utilisant C # pour la programmation de jeux. Donc, j'ai un moteur d'exécution mono C ++ app plongement (je l'appelle « lanceur »). Et j'ai un écrit assemblage en C # qui est ma bibliothèque de classes de moteur de jeu. Les lancements du lanceur le montage comme il est suggéré dans Embedding Mono .

Et maintenant la partie intéressante! Le lanceur met en œuvre dans les fonctions C MISCELANEOUS de qui sont exposés à l'exécution mono comme méthodes internes de mes classes de moteur de jeu. Voilà pourquoi est mon assemblage moteur de jeu rien sans le lanceur qui met en œuvre une grande partie du moteur en C ++.

La question: Comment dois-je déboguer mon C # assemblée? Et ce qui est plus important encore, comment suis-je censé déboguer un jeu que je vais écrire en C # ???

Comme vous le savez, je ne peux pas déboguer l'ensemble à l'aide MonoDevelop Debugger parce qu'il ne reçoit pas les implémentations de C ++ interne de certaines de ses méthodes.

Ce que je besoin est d'exécuter le lanceur. Le lanceur lancera alors C # en utilisant l'assemblage intégré mono exécution. Et je besoin de quelque chose pour se connecter à l'ensemble lancé pour permettre son débogage.

Ou de toute autre manière. Merci!

Était-ce utile?

La solution

Je recommande d'utiliser le Mono doux Debugger. Il a été inclus dans le runtime Mono depuis Mono 2.6, et est plus fiable que l'ancien débogueur dur, et aussi beaucoup plus portable.

Le débogueur doux Mono peut être démarré par des options passant en utilisant l'argument de ligne de commande de --debugger-agent à l'exécution Mono. Cela peut être fait à partir d'un hôte d'intégration en construisant un ensemble de faux arguments et de commandline passant à mono_jit_parse_options. Par exemple, le plug-in du navigateur Moonlight utilise les valeurs d'agent de débogueur de variable d'environnement MOON_SOFT_DEBUG si elle est définie.

En général débogueur options sont quelque chose comme

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

ce qui entraînera l'application d'essayer de se connecter à l'écoute débogueur sur l'adresse donnée et une pause jusqu'à ce qu'il établit une connexion. Notez que la connexion est établie via TCP / IP, ce qui signifie que le débogage à distance est très facile à mettre en place, et même sur la machine locale utiliserait localhost. D'autres options sont documentées sur la page de manuel de Mono.

L'autre pièce dont vous avez besoin est l'interface graphique du débogueur / contrôleur, pour écouter la connexion de votre application, et pas à pas poignée / visualisation, etc. Je suggère d'utiliser MonoDevelop. Il y a une bibliothèque pour le protocole de fil débogueur appelé Mono.Debugger.Soft.dll, mais il est assez bas niveau, et bien que les outils Mono pour supports Visual Studio se connectant au débogueur doux, il est pas encore extensible d'une manière qui permettrait le débogage Mono hôtes enrobage.

Utilisation MonoDevelop pour accepter les connexions débogueur à partir d'hôtes nécessite actuellement la création d'incorporation d'un Addin, mais cela est assez simple. Jetez un oeil à la page Moonlight débogueur Addin pour un exemple. Pour les cas simples d'utilisation, je suggère que vous ne définissez pas un nouveau type de projet entier mais juste de créer un gestionnaire de débogage poignées projets existants DotNetExecutionCommand, de sorte que vous pouvez run-> courir avec ...-> débogueur personnalisé .

Le monodevelop liste liste de diffusion est une bonne ressource si vous avez d'autres questions .

Autres conseils

Faire usage de débogage réseau.

Vous pouvez utiliser le doux Debugger pour déboguer les parties Mono et puis utiliser débogage à distance pour les pièces C ++ .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top