[MethodImpl(MethodImplOptions.InternalCall)]
おそらく C++ で実装されている BCL メソッドの実装をデバッグしたいと考えています。(この特定のケースでは、System.String.nativeCompareOrdinal を見ています。) これは主に、私がおせっかいで、それがどのように実装されているか知りたいからです。
ただし、Visual Studio デバッガーはそのメソッドにステップインすることを拒否しています。この呼び出しにブレークポイントを設定できます。
"Hello".Equals("hello", StringComparison.OrdinalIgnoreCase);
次に、[デバッグ] > [ウィンドウ] > [逆アセンブリ] を表示し、Equals 呼び出しにステップ インして、call
x86 命令に到達するまでステップ実行します。しかし、その上で「ステップ イン」を使用しようとするとcall
(Reflector からは nativeCompareOrdinal 呼び出しであることがわかっています)、必要なように nativeCompareOrdinal 内の最初の命令にステップ インしません。 Equals の次の x86 命令。
x64 アプリでは混合モードのデバッグがサポートされていないため、x86 としてビルドしています。[ツール] > [オプション] > [デバッグ] で [マイ コードのみ] のチェックを外し、[プロジェクト プロパティ] > [デバッグ] タブで [アンマネージ コードのデバッグを有効にする] をチェックしましたが、call
. また、プロセスを開始してからデバッガーをアタッチし、マネージド デバッガーとネイティブ デバッガーの両方を明示的にアタッチしようとしましたが、それでもその InternalCall メソッドにステップ インしません。
Visual Studio デバッガーをアンマネージ メソッドにステップインさせるにはどうすればよいですか?