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.
..por supuesto, cuando es un número de línea dice tan explícitamente: ..... \ Areas \ Store \ Models \ CheckoutModel.cs: línea 158 –