Перешагнуть через «управляемый к родному переходу» в Visual Studio? - PullRequest
11 голосов
/ 21 февраля 2012

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

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

enter image description here

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

enter image description here

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

Как мне пройти через этот переход?

Ответы [ 2 ]

3 голосов
/ 27 марта 2013

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

Display Native to Managed Transition

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

enter image description here

1 голос
/ 28 февраля 2012

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

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

...