Frage

Ich spreche von einem kleinen Spiel-Engine mit C # für Spiele-Programmierung. Also, ich habe eine C ++ app Einbettung Mono-Laufzeit (ich nenne es ‚Launcher‘). Und ich habe eine Versammlung in C # geschrieben, die meine Spiel-Engine Klassenbibliothek ist. Die Trägerrakete startet die Montage, wie es in Embedding Mono .

Und nun der interessante Teil! Die Abschussgeräte in C ++ miscelaneous Funktionen, die auf den Mono-Runtime als interne Methoden meines Spiels Motorklassen ausgesetzt sind. Deshalb Montage mein Spiel-Engine ist nichts ohne den Launcher welche Geräte ein großer Teil des Motors in C ++.

Die Frage: Wie soll ich meine C # Montage debuggen? Und was noch wichtiger ist, wie ich ein Spiel debuggen bin soll, die ich in C # zu schreiben werde ???

Wie Sie verstehe ich nicht, die Montage mit MonoDevelop Debugger debuggen können, weil es keine internen C erhalten ++ Implementierungen einiger seiner Methoden.

Was ich brauche, ist der Launcher laufen. Der Launcher startet dann C # Mono Runtime-Assembly eingebettet werden. Und dann brauche ich etwas zu der gestarteten Montage verbinden seiner Fehlersuche zu ermöglichen.

oder irgendeine andere Art und Weise. Vielen Dank!

War es hilfreich?

Lösung

Ich empfehle den Mono Soft-Debugger. Es wurde in der Mono-Laufzeit seit Mono 2.6 und ist zuverlässiger als der alte Fest Debugger, und auch viel mehr tragbar.

enthält

Der Mono Soft-Debugger kann, indem man Optionen mit dem --debugger-agent Command Argumente für die Mono-Laufzeit gestartet werden. Dies kann von einem Einbettungs Host erfolgen durch einen gefälschten Satz von Kommandozeilenargumenten konstruieren und zu mono_jit_parse_options vorbei. Zum Beispiel verwendet die Moonlight-Browser-Plugin der Debugger Agenten Werte von MOON_SOFT_DEBUG Umgebungsvariable, wenn es gesetzt ist.

Normalerweise Debugger-Optionen sind so etwas wie

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

, die die App wird dazu führen, um zu versuchen, Debugger Hören auf die angegebene Adresse zu verbinden, und Pause, bis es eine Verbindung herstellt. Beachten Sie, dass die Verbindung über TCP / IP hergestellt wird, das Remote-Debugging bedeutet, ist sehr einfach einzurichten, und auch auf dem lokalen Rechner würden Sie localhost verwenden. Weitere Optionen sind auf Mono Manpage dokumentiert.

Das andere Stück, das Sie benötigen, ist der Debugger GUI / Controller, für die Verbindung von Ihrer App zu hören, und der Griff Stepping / Visualisierung etc. würde ich mit MonoDevelop vorschlagen. Es gibt eine Bibliothek für das Debugger-Wire-Protokoll genannt Mono.Debugger.Soft.dll, aber es ist ziemlich Low-Level, und obwohl Mono Tools für Visual Studio unterstützt die weichen Debugger verbinden, dann ist es noch nicht erweiterbar in eine Weise, die erlauben würde, Mono Debuggen Einbetten von Hosts.

MonoDevelop Mit Debugger-Verbindungen von der Einbettung Hosts zu akzeptieren, die derzeit eine Addin erfordert die Schaffung, aber das ist ziemlich einfach. Werfen Sie einen Blick auf die Moonlight Debugger Addin für ein Beispiel. Für einfache Anwendungsfälle würde ich vorschlagen, dass Sie nicht einen ganz neuen Projekttyp definieren, sondern nur einen Debug-Handler, dass vorhandenen Griffe DotNetExecutionCommand Projekte, so dass Sie Ausführen-> liefen mit ...-> Ihren benutzerdefinierten Debugger .

Die monodevelop-Liste Mailing-Liste ist eine gute Ressource, wenn Sie weitere Fragen haben, .

Andere Tipps

Nutzen Sie Netzwerk-Debugging.

könnten Sie die Soft-Debugger die Mono Teile debuggen verwenden, und dann Remote-Debugging für die C ++ Teile .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top