Пройти через "управляемый переход" в Visual Studio?

Пытаясь ответить на этот вопрос, я решил, что мне нужно пройти через процесс сортировки вручную в представлении отладчика.

К сожалению, Visual Studio, похоже, перепрыгивает через весь этот интересный код. Здесь вызов P/Invoke на GetProfilesDirectory (функция WinAPI):

enter image description here

но после перехода на этот вызов (F11), я не нахожусь в FFF9BFD8; скорее, я приземлюсь прямо в коде GetProfilesDirectory:

enter image description here

Также есть запись [Managed to Native Transition] в стеке, намекая на то, что Visual Studio просто перепрыгнула через целую кучу кода.

Как я могу пройти этот переход?

Ответ 1

Я удивлен, что никто не предложил вам показать внешний код в окне отладки. Если вы щелкните правой кнопкой мыши по строке [Native to Managed Transition] и отметьте опцию "Показать внешний код", вы увидите, какие именно методы вызывают в процессе перехода. Это может дать вам лучшую идею. Вот пример:

Display Native to Managed Transition

Затем вы сможете дважды щелкнуть по любой (серой) линии, а с кодом будет открыта страница Disassembly. Другой пример:

enter image description here

Ответ 2

В Visual Studio вы не можете этого сделать, т.е. нет способа переключить отладчик VS в режим, чтобы увидеть, что происходит во время перехода от управляемого к родному.

Вместо этого вы можете попробовать WinDbg + SOS/SOSEX, поскольку WinDBG не скрывает от вас подобные данные. Тем не менее, эта часть - либо внутренняя абстракция .NET, либо Windows, поэтому, даже если вы ее видите, вам может не понравиться, что бы увидеть, что на самом деле происходит (помимо сборки), вам понадобятся частные символы для mscorlib, mscoreei, или clr dlls (файлы pdb).