Я хочу отладить реализацию 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 перейти в неуправляемый метод?