2012-07-24 21 views
20

Llamo a un método en Visual Studio e intento depurarlo revisando la pila de llamadas.¿Qué significa "código externo" en la pila de llamadas?

Algunas de las filas están marcadas como "Código externo".

¿Qué significa exactamente esto? Métodos de un .dll han sido ejecutados?

Pregunta estúpida; pero necesito una respuesta definitiva.

+0

@AlvinWong: No está del todo bien, he tenido código no disponible en la solución para la depuración. Creo que es la falta de información de símbolos como dice Tigran. –

+0

Buena publicación sobre el asunto: http://blogs.msdn.com/b/zainnab/archive/2010/10/24/show-external-code-vstipdebug0031.aspx –

Respuesta

12

Estas son las líneas donde información del símbolo no está disponible actualmente para Visual Studio Debugger. En otras palabras, Debugger no puede recuperar el código de la línea ejecutada.

Escribí actualmente porque la información del símbolo se puede descargar o configurar.

Para más información se puede leer lo siguiente: How to: Specify Symbol Locations and Loading Behavior

+0

MSDN tiene información más precisa sobre lo que se considera [" Mi código "] (https://msdn.microsoft.com/en-us/library/dn457346.aspx). Existen diferencias entre C# y C++ y existe un código con información de símbolo disponible que aún se considera código externo. – m3tikn0b

1

Esas líneas no son referenciados por los símbolos de depuración que tiene actualmente cargados.

Este código puede ser parte de una DLL externa, o código nativo dentro de la CLR. Si sabe qué módulo es y tiene símbolos de depuración para ellos, puede cargarlos en Visual Studio manualmente.

0

Métodos que no tiene código/símbolos para. Como .NET framework o montajes de terceros.

0

puede usar la acción Adjuntar al proceso en el menú Depurar para depurar la instancia en ejecución de su aplicación de host. (el proceso en ejecución tiene los símbolos de depuración archivos .pdb).

4

La notación 'Código externo' hace referencia a todo lo que no pertenece a 'Mi código'.

Esa es la forma en que se describe en la documentación de MSDN aquí How to: Use the Call Stack Window

en código administrado, de manera predeterminada. la ventana Pila de llamadas oculta información para código que no es de usuario. > Aparece la siguiente notación en lugar de la información oculta.

< [Código externo]>

código para no usuario es cualquier código que no es "mi código." `

Your Code es como se podría haber pensado en todo lo que ha escrito en su propia . Entonces, con esta definición, todo lo que pertenece a dll externos se omite en la traza de la pila de llamadas.

Además, de acuerdo con How to: Step Into Just My Code tiene la posibilidad de denegar el depurador para tratar de rastrear el código no de usuario.

Aquí se encuentra la explicación de lo que en realidad es user code:

Para distinguir código de usuario en código no usuario, Sólo mi código se ocupa de tres cosas: DBG, archivos PDB, y optimización.

24

[Código externo] significa que no hay información de depuración disponible para esa dll.

Lo que puede hacer es en Call Stack ventana haga clic en el botón derecho del mouse. Luego, seleccione Show External Code, esto ampliará [Código externo] y le mostrará los módulos que están siendo llamados.

enter image description here

una vez que se expandió verá DLL que están siendo llamados puede obtener ubicaciones en el disco haciendo clic en Symbol Load Information...

enter image description here

Esto abrirá de diálogo que muestra las ubicaciones en el disco

enter image description here

Si desea depurar estos archivos externos que necesita para obtener .pdb archivos de DLL y lugar en misma carpeta que .dll

esto debería permitir que Load symbols (menú en pantalla 2 anterior Symbol Load Information) e iniciar la depuración.

More on getting .pdb files here.

And here's an actual example of EF .pdb being generated

Hope esto le ahorra tiempo.

Cuestiones relacionadas