Как я могу выполнить отладку в неуправляемый метод BCL (InternalCall)?

Я хочу отладить реализацию BCL-метода [MethodImpl (MethodImplOptions.InternalCall)] , который предположительно является реализован на C ++. (В данном конкретном случае я Я смотрю на System.String.nativeCompareOrdinal.) Это в основном потому, что я любопытен и хочу знать, как это реализовано.

Однако отладчик Visual Studio отказывается использовать этот метод. Я могу установить точку останова для этого вызова:

"Hello".Equals("hello", StringComparison.OrdinalIgnoreCase);

затем вызвать Debug> Windows> Disassembly, перейти к вызову Equals и шагать, пока не дойдет до инструкции call x86. Но когда я пытаюсь использовать «Шаг с заходом» для этого вызова (который, как я знаю из Reflector, является вызовом nativeCompareOrdinal), он не переходит к первой инструкции внутри nativeCompareOrdinal, как я хочу - он переходит вместо этого, и сразу переходит к следующей инструкции x86 в Equals.

Я строю как x86, поскольку отладка в смешанном режиме не поддерживается для приложений x64. Я снял флажок "Только мой код" в Инструменты> Параметры> Отладка, и у меня установлен флажок «Включить отладку неуправляемого кода» в свойствах проекта> вкладка «Отладка», но он все равно переходит вызов . Я также попытался запустить процесс, а затем подключить отладчик и явно подключить как управляемый, так и собственный отладчики, но он все равно не войдет в этот метод InternalCall.

Как я могу заставить отладчик Visual Studio перейти в неуправляемый метод?

5
задан Joe White 23 September 2010 в 12:57
поделиться