2016-04-12 9 views
2

"マネージドC#DLL"として "extensions"をサポートする特定のアプリケーションで作業しています。アプリケーション自体はネイティブアプリケーションであり、そのソースコードはありません。Visual StudioでネイティブアプリケーションによってロードされたマネージDLLをデバッグする2015

私はDLLをロードするアプリケーションを取得することができ、私は自分の関数が呼び出されていることを確認することができます。私が望むのは、実行時にDLLの拡張コードをデバッグできることです。 Visual Studioを使用してネイティブアプリケーションのプロセスにアタッチすることはできますが、「シンボルがロードされていません...」というエラーが表示されるため、ブレークポイントを設定できません。 PDBファイルは、DLLの横にあります。

DLLがはっきりと使用されているにもかかわらず、Visual Studioデバッガは私のManaged C#コードを認識していないようです。たとえば、「モジュール」ビューを参照すると、リストにDLLが表示されません。

いくつかのVisual Studioのサポートページを読むと、通常は実行中のアプリケーションのプロジェクトで有効になる「混合モード」があるようです。しかし、私は実際にアプリケーションを構築していないので、この設定を変更することはできません。

これを達成する別の方法があるかどうか誰かが知っていますか?

答えて

0

ビジュアルスタジオには、DLLがロードされていて、プログラムが通常の.netランタイムを使用している場合、DLLがリストに表示されます。それは、例えば、モノまたはモノを使用している場合、そこにはないかもしれません。

私は管理されていないプログラムのソースを持っていないと、ここでは問題ではないと思います。 「混合モード」は、プロジェクトで設定したものではありません。これは、VSからプロジェクトを開始するときにどのデバッグモードを使用するかをVSに設定するために設定したものです。プロセスにアタッチするときには、さらに多くのオプションを選択できます。これは重要なことです。

私は理論をテストするには、このプロジェクトを使用:https://code.msdn.microsoft.com/windowsdesktop/CppHostCLR-e6581ee0

私はリリースモードを構築し、PDBを削除し、(static int GetStringLengthで)CSClassLibraryにブレークポイントをヒットすることができたVS2015を使用して取り付けるときに、手動でデバッガの種類を選択することにより、プロセスに

タイミング問題がある場合(vs .netのスタートアップとdllのロードを取り付ける)、接続するときに.netが起動せず、接続がわからない場合.netデバッガを有効にしてください。したがって、手動で指定すると役立ちます。

また、デバッグタイミングの問題を解決する際の標準的なトリックは、System.Diagnostics.Debugger.Break()をC#コードに配置することです。これにより、Visual Studioをその時点ですぐに接続できるようになりますあなたのC#コードが(うまくいけば正常な).netランタイムで動作していると確信しています。

0

添付したプロセスによってDLLがロードされていない場合、Visual Studioはそのエラーを表示します。エラーを無視し、いつものようにブレークポイントを設定してください。ネイティブアプリケーションがDLLをメモリにロードすると、ブレークポイントアイコンが赤くなり、期待どおりに機能するはずです。

関連する問題