2012-02-27 14 views
1

C++の関数/変数を呼び出すC#プログラムがあります。 C++プログラム自体が正常に実行され、チェックされます。しかし、このDLLをビルドしてC#で使用すると、C#で正しい結果を得ることができないインターフェイスコードにバグがあります。DLL内のコードをデバッグする方法

おそらく、エクスポート変数/エクスポートされた関数に何らかのエラーがあり、チェックしたい結果が出ています。

私の主な質問は、ブレークポイントなどを入れたり、他のプログラムでできるように結果を見て、このDLLをどのようにデバッグするのですか?

答えて

2

ネイティブ(C++)DLLのソースコードとデバッグシンボルがあると仮定すると、管理対象(C#)EXEプロジェクトの[デバッグ]タブの[管理されていないコードのデバッグを有効にする]オプションをチェックしてから、通常どおりC++コード内の変数などを検査します。 C++プロジェクトをソリューションに追加することも、単一のC++ソースコードファイルを開いてそこにブレークポイントを設定することもできます。

+0

私のC++プロジェクトはソリューションにあり、すべてのブレークポイントが設定されています。私はC#exeプロジェクトのデバッグタブの ''アンマネージドコードデバッグオプションを有効にする 'をチェックしましたが、デバッグを開始するとC++のブレークポイントは無効になります。(また、それらの上にマウスを置くとツールチップメッセージが表示されます。この文書のために読み込まれました」) – Cipher

+0

実際にはい!これは動作します!ありがとう – Cipher

1

DLLをデバッグする場合は、C++環境で作業し、C++コードにブレークポイントを設定し、c#によって生成された実行ファイルを使用する必要があります。

0

シナリオのこの種をデバッグするための最良の方法は、またはWindbgの+ SOSの拡張子(急勾配の学習曲線を使用しますが、この(devenvを/ debugexe yourapp.name.exeコマンドを経由して)いずれかを使用してVisual Studioの混合モードのデバッグでありますWindbg + SOSの使い方を学ぶには、Mario Hewardtによる高度な.NETデバッグを参照してください。

この種の問題は、多くの場合、 1)C++ APIで使用するC#データ型が正しくありません 2)誤って指定されている/指定されていない関数呼び出し規約 http://blogs.msdn.com/b/adam_nathan/archive/2003/05/21/56690.aspx

関連する問題