2009-10-12 2 views
8

C/C++コードがP/Invokeを介して非管理サードパーティライブラリ関数を呼び出していますが、アンマネージ関数にいくつかの奇妙な副作用があります。私はそれにデバッグし、それが何をしているかを見たいと思います。disassembyビューでP/Invoke呼び出しに移動

私のC#コードをデバッグし、P/Invoke呼び出しを "ステップイン"しようとすると、代わりにステップオーバーします。そこには驚きはありません - 私はそれを期待しました。このDLLのソースはありません。また、逆アセンブリビューが表示されていても問題ありませんでした。

したがって、デバッガを逆アセンブリビューに切り替えます([デバッグ]> [Windows]> [逆アセンブリ])。今私はJITtedコード内の個々のx86命令を見る。再び私はP/Invoke呼び出しにステップインしようとします。繰り返しますが、x86 CALL命令にステップインすることを明確に示したにもかかわらず、代わりにステップオーバーします。 x86 CALLに入るのはどれくらい難しいですか?私のこれまでのところ私は、この影響を与えることができるオプションのカップルを示しているグーグル、と私はすでにそれらを設定している

:ツールで

  • > [オプション]> [デバッグ]> [全般]を、「マイコードのみを有効にする」でありますチェックされていません。
  • [プロジェクト]> [プロパティ]> [デバッグ]タブで、[管理されていないコードのデバッグを有効にする]をオンにします。

いいえいいえ。 Visual Studioはまだ入りません。

私はサードパーティのDLL用のPDBを持っていませんが、それは問題ではありません。ソースコードやシンボル情報は気にしません。 Visual Studioはx86デバッグを行うことができます(つまり、逆アセンブリビューはです)、私がしたいのはx86コードに一歩進んでください。

VSでP/Invokeコールのx86命令にステップインするには、他に何が必要ですか?

+0

あなたはこれを理解しましたか? – Dennis

+1

私はこれをやろうとしてから数年が経ちましたが、私が思い出したように、いいえ、私はそれを働かせることはありませんでした。 –

答えて

1

私は、C#からC++/CLIコードへ、さらにC++からサードパーティコードへの移行を試みています。いったんC++(そしてP/Invokeインフラストラクチャから解放されている)になったら、逆アセンブリビューでもっとうまくいくかもしれません。

+1

私はC++/CLIコードを書くことについてはほとんど何も知っていません...私はこの戦略を開始するのに役立つリンクがありますか? –

4

Thisあなたは問題の解決に役立つことがあります。 (グラビトンによる)

CallingConvention = CallingConvention.Cdecl 

またthisは、あなたが管理し、デバッガを切り離し、境界を通過するときに管理対象外に再接続する必要があることに言及しています。混合デバッガの機能をチェックする必要があり、MSDNの設定が必要な場合があります。

そして最後に、Ed Dore'答え使用:Tools.Optionsダイアログの下

を、 デバッグカテゴリを選択して、 「マイコードのみを有効にする」の設定がオフ であることを確認してください。プロジェクト のプロパティから、[デバッグ]タブを選択し、 を入力し、[管理されていない コードのデバッグを有効にする]がオンになっていることを確認します。

これらの値を二乗すると、 の混合モード のデバッグサポートが有効になります。

また、「デバッグ」を使用すると、 プロセス 『のダイアログに取り付け、両方 マネージドとネイティブデバッグサポートを選択する選択...『のボタン』「 を打つようにしてください、』 プロセスにアタッチします。あなたのC#プロジェクトのプロパティで

+0

これらのヘルプのどれも、VS2017/Win10のフレームワークメソッドへの呼び出しにステップしません。 –

1

、[デバッグ]タブで、チェックネイティブコードのデバッグを有効にします。

クレジットがbillbに行くVS 2012年に私のために働いた。それは、サードパーティのライブラリですので、

また、マイコードのみがオプションでオフになっている有効に確保>デバッグ。

0

同じソリューションのすべての一部であるPInvoke経由で自分のC++ dllを呼び出すC#exeをデバッグしていたのと同じ問題がありました。私のC#プロジェクトでネイティブコードのデバッグを有効にすると、私のC++コードをデバッグすることができました。

関連する問題