2012-03-06 22 views
3

私はEmbedded Monoを使用しています。主なアプリケーションはC++で、アセンブリをロードしたり、オブジェクトを構築したり、メソッドを呼び出すことができます。Embedded Monoを使用したデバッグC#コードでブレークポイントを設定する方法は?

私が今したいことは、MonoDevelopを使用して自分のプログラムに接続し、 Managed(C#)コード内のブレークポイント。多くの研究の後、私は次のように を渡しています:上記の呼び出しを行った後

static const char* options[] = { 
      "--soft-breakpoints", 
      "--debugger-agent=transport=dt_socket,address=127.0.0.1:10000" 
     }; 

mono_jit_parse_options(sizeof(options)/sizeof(char*), (char**)options); 
mono_debug_init(MONO_DEBUG_FORMAT_MONO); 

、アプリはMonoDevelopのに接続します。

MonoDevelop側では、envを設定します。 。 - >カスタムコマンドを実行していただくために: - >で実行 - 」ファイル名を指定して実行を使用 にあなたを可能にvar MONODEVELOP_SDB_TEST=yそれは アプリに接続します。ここ

をして>カスタムコマンドMonoSoftデバッガはトリッキーな部分ですMonoSoftデバッガー あなたがプロジェクトを開くために必要な選択肢は、これを行うために、私は単に(Debug組み込み)アセンブリを開いた後、Project Optionsでカスタム "Execute"コマンドを追加し、C++ .exeをポイントしてチェックしました"外部コンソールで実行"

MonoSoftデバッガダイアログの "Listen"をクリックすると、アプリケーションが起動し、アセンブリに関するアプリケーション出力にメッセージが表示されますが、ソースファイル(C#)を開くと、 abを設定しようとするreakpoint、無効になった色を変え、決して殴られることはありません。何が足りないのですか?私のアセンブリをデバッグするためにmonoに通知するために、他のmono_debug関数を呼び出す必要がありますか?MonoDevelopにソースを探す場所を伝えるgdbのようなパスプロパティがありますか?

+0

Mono-2.10.8とMonoDevelop 2.8.6.5をWindowsとLinuxで使用していることを忘れてしまった。 – Eric

答えて

2

私たちのアプリがスタックトレース(Environment.Stacktrace)を印刷するとき、それらはソースファイルと行情報を持っていますか?そうでない場合は、アセンブリの横にmdbシンボルファイルがあることを確認する必要があります。

マネージコードが.NETのコンパイラでビルドされている場合は、Monoがロードできないpdbファイルがあります。 pdb2mdbツールを使用して、mdbファイルに変換します。

また、スタックトレース内のファイルパスが、ホストマシン上の実際のソースファイルへのパスと一致することを確認してください。

+0

ビンゴ!そうだった、ありがとう。 – Eric

関連する問題