2012-02-21 10 views
11

Al intentar responder this question decidí que debía pasar por el proceso de clasificación a mano, en la vista del depurador.¿Paso a través de la "transición a la nativa" en Visual Studio?

Desafortunadamente, Visual Studio parece saltar sobre todo este código interesante. Aquí está el P/Invoke llamada a GetProfilesDirectory (una función API de Windows):

enter image description here

pero después de entrar en esta llamada (F11), yo no me encuentro en FFF9BFD8; más bien, me tierra justo en el código GetProfilesDirectory:

enter image description here

También existe la [Managed to Native Transition] entrada en la pila, haciendo alusión a que Visual Studio simplemente había saltado sobre un montón de código.

¿Cómo puedo pasar por esta transición?

+5

Bueno Gosh, me encontré con el problema ya: está utilizando una fuente de ancho variable en un editor de código! Eso es solo una locura. –

+1

¡El sacrilegio! ¡Mejor pregunte a los posibles contratados qué tipo de letra usan, para asegurarse de que no me inscriba con mi locura! –

Respuesta

3

Me sorprende que nadie haya sugerido que muestre el código externo en la ventana de depuración. Si hace clic con el botón derecho en la línea [Transición nativa a la transición administrada] y marca la opción Mostrar código externo, verá exactamente qué métodos se están llamando en la transición. Esto puede darte una mejor idea. Aquí está un ejemplo:

Display Native to Managed Transition

A continuación, será capaz de hacer doble clic en cualquier línea (en gris) y una página Disassembly se abrirá con el código. Otro ejemplo:

enter image description here

1

En Visual Studio, no se puede hacer eso, es decir, no hay forma de cambiar el depurador VS a un modo para ver qué está pasando durante la transición Gestionado a Nativo.

Puede probar WinDbg + SOS/SOSEX en su lugar, ya que WinDBG no oculta este tipo de detalles. Sin embargo, esa parte es abstracción interna de .NET o Windows, por lo que incluso si pudiera verla, es posible que no obtenga mucho, para ver qué está sucediendo allí (además del ensamblaje), necesitará símbolos privados para mscorlib, mscoreei , o clr dlls (archivos pdb).

Cuestiones relacionadas