埋め込まれたモノランタイムによって起動されたC#アセンブリのデバッグ?

StackOverflow https://stackoverflow.com/questions/3649503

質問

ゲームプログラミングにC#を使用して、小さなゲームエンジンについて話しています。したがって、C ++アプリがモノランタイムを埋め込んでいます(「ランチャー」と呼んでいます)。そして、私のゲームエンジンクラスライブラリであるC#に書かれたアセンブリがあります。ランチャーは、で提案されているようにアセンブリを起動します 埋め込みモノ.

そして今、興味深い部分!ランチャーは、ゲームエンジンクラスの内部メソッドとしてモノラルタイムにさらされるC ++誤間関数を実装しています。だからこそ、私のゲームエンジンアセンブリは、C ++のエンジンの大部分を実装するランチャーなしでは何もありません。

質問:C#アセンブリをどのようにデバッグすることになっていますか?そして、もっと重要なことは、C#で書くゲームをどのようにデバッグすることになっているのですか?

ご存知のように、Monodevely Debuggerを使用してアセンブリをデバッグすることはできません。これは、そのメソッドの一部の内部C ++実装を受け取らないためです。

必要なのは、ランチャーを実行することです。その後、ランチャーは、埋め込みモノランタイムを使用してC#アセンブリを起動します。そして、そのデバッグを可能にするために、起動したアセンブリに接続するために何かが必要です。

または他の方法。ありがとうございました!

役に立ちましたか?

解決

Mono Soft Debuggerを使用することをお勧めします。 Mono 2.6以来、Mono Runtimeに含まれており、古いハードデバッガーよりも信頼性が高く、さらにポータブルです。

モノソフトデバッガーは、 --debugger-agent モノランタイムに対するコマンドラインの引数。これは、偽のコマンドライン引数を構築し、それをに渡すことにより、埋め込みホストから実行できます mono_jit_parse_options. 。たとえば、MoonLightブラウザプラグインは、設定されている場合、voon_soft_debug環境変数のデバッガーエージェント値を使用します。

通常、デバッガーオプションは似ています

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

これにより、アプリは指定されたアドレスでデバッガーリスニングに接続しようとし、接続を確立するまで一時停止します。接続はTCP/IPで確立されていることに注意してください。これは、リモートデバッグが非常に簡単に設定できることを意味し、ローカルマシンでもLocalHostを使用することに注意してください。追加のオプションは、Mono's Manページに文書化されています。

必要なもう1つの作品は、アプリから接続をリッスンし、ステップ/視覚化などを処理するためのデバッガーGUI/コントローラーです。モノデベロムを使用することをお勧めします。 Mono.debugger.soft.dllと呼ばれるデバッガーワイヤプロトコル用のライブラリがありますが、それはかなり低レベルであり、Visual StudioのMonoツールはソフトデバッガーへの接続をサポートしていますが、モノーのデバッグを可能にする方法ではまだ拡張できません。埋め込みホスト。

埋め込みホストからデバッガー接続を受け入れるためにモノデベロムを使用するには、現在追加が必要ですが、これはかなり簡単です。を見てください ムーンライトデバッガーアディン 例として。簡単なユースケースの場合、まったく新しいプロジェクトタイプを定義するのではなく、既存のdotnetexecutionCommandプロジェクトを処理するデバッグハンドラーを作成するだけで、できることをお勧めします。 run-> with ... - >カスタムデバッガー.

Monodevelop-List メーリングリストは、さらに質問があれば良いリソースです。

他のヒント

ネットワークデバッグを使用します。

使用できます ソフトデバッガー モノパーツをデバッグしてから使用します リモートデバッグ C ++部品用。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top