4

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

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

質問: C# アセンブリをデバッグするにはどうすればよいですか? さらに重要なことは、C# で記述しようとしているゲームをどのようにデバッグすればよいのでしょうか? ???

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

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

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

4

2 に答える 2

5

Mono Soft Debugger の使用をお勧めします。これは、Mono 2.6 以降の Mono ランタイムに含まれており、古いハード デバッガーよりも信頼性が高く、移植性にも優れています。

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

通常、デバッガーのオプションは次のようなものです

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

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

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

MonoDevelop を使用して埋め込みホストからのデバッガー接続を受け入れるには、現在、アドインを作成する必要がありますが、これはかなり簡単です。例として、 Moonlight デバッガー アドインを見てください。単純なユース ケースでは、まったく新しいプロジェクト タイプを定義するのではなく、既存の DotNetExecutionCommand プロジェクトを処理するデバッグ ハンドラーを作成することをお勧めします

さらに質問がある場合は、monodevelop-list メーリング リストが良いリソースです

于 2010-09-07T20:21:24.077 に答える
1

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

ソフト デバッガーを使用して Mono 部分をデバッグし、次にリモート デバッグを C++ 部分に使用できます。

于 2010-09-07T11:58:01.183 に答える