2009-01-29 14 views
7

Cuando se lanza una excepción en una página web de Asp.Net, se muestra un mensaje de error con el seguimiento completo de la pila.Mensaje de error de excepción con número de línea incorrecto

Ejemplo a continuación:

Seguimiento de la pila:
IndexOutOfRangeException: Índice fuera de los límites de la matriz.

MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView() +5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load (Object sender, EventArgs e) 67
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, objeto O , objeto t, EventArgs e) 13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Object sender, EventArgs e) +43
System.Web.UI.Control.OnLoad (EventArgs e) 98
.. ...

El problema es que el número de línea displa yed no corresponde a la línea en mi código que originó la excepción.
En el ejemplo anterior, la pila muestra el número de línea 5111, pero mi código detrás del archivo .cs solo tiene 250 líneas.

La página aspx se almacena en un sitio de SharePoint y el ensamblado con el código subyacente se ha implementado en GAC. Además, he compilado en modo de depuración.

Dada la configuración anterior, ¿cómo puedo averiguar qué línea en mi código causó la excepción?



Aclaración como ha señalado strelokstrelok:

En modo de lanzamiento el número delante de la excepción no es la línea de código. En cambio, es una compensación del código compilado nativo, que no tiene ningún significado para los humanos. Más sobre esto aquí: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

En modo de depuración el archivo PDB le asignará automáticamente el desplazamiento a su línea .cs en el código y el número que se muestra será la línea correspondiente en el código de código nativo.

+1

..por supuesto, cuando es un número de línea dice tan explícitamente: ..... \ Areas \ Store \ Models \ CheckoutModel.cs: línea 158 –

Respuesta

10

Esos números NO son números de línea. En el modo de lanzamiento, el seguimiento de la pila contiene los desplazamientos en el código compilado nativo en lugar de los números de línea. Puede leer más al respecto aquí: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

La única manera de obtener números de línea en un seguimiento de pila es si compiló el código en modo de depuración con los archivos PDB disponibles.

4

Su código detrás del archivo no es la clase completa, es solo una parte que se usa cuando la clase como un todo es compilada por ASP.NET. Para encontrar lo que realmente está en esa línea, eche un vistazo a la clase/ensamblado compilado usando una herramienta como Reflector.

+0

Podría estar equivocado aquí pero AFAIK, en ASP.Net, la pila siempre le da el línea correcta, sin embargo, en Asp.Net + SharePoint esto no parece ser el caso. De todos modos, uso el reflector red-.Net de red, pero no pude encontrar nada que me ayudara a identificar la línea de código que causó la excepción. –

+0

Esto es incorrecto. Esos números NO son números de línea y ni siquiera se desplazan a IL. – Strelok

1

Tal vez el código de ejecución no es lo que ves en la pantalla. Algún compañero podría haberlo refactorizado para ti. :)

+0

recuerde obtener el código más reciente del control de código fuente si está en un entorno de equipo +1 – Dean

Cuestiones relacionadas