¿Por qué aparece ningún número de línea de una traza de pila creado a partir de excepciones?

StackOverflow https://stackoverflow.com/questions/2228893

Pregunta

Está bien; asumiendo este código que se ejecuta en modo de depuración -

static StackFrame GetTopFrameWithLineNumber(Exception e)
{
    StackTrace trace = new StackTrace(e);
    foreach (StackFrame frame in trace.GetFrames())
    {
        if (frame.GetFileLineNumber() != 0)
        {
            return frame;
        }
    }
    return null;
}

Me estoy volviendo siempre nula. ¿Por qué los marcos de pila no tienen números de línea cuando si inspecciono la cadena Exception.StackTrace, está claro que ellos no tienen para cualquier código no estructural? ¿Hay algún problema con la construcción de un seguimiento de la pila de una excepción que no soy consciente de?

EDITAR para mayor claridad: En la excepción lanzada puedo ver los números de línea en la propiedad StackTrace. Estoy asumiendo que significa que tengo todo lo que necesito.

¿Fue útil?

Solución

De acuerdo con la documentación de href="http://msdn.microsoft.com/en-us/library/25h0kw08.aspx" en la sobrecarga de constructor StackTrace que toma una excepción no se puede esperar números de línea al crear el StackTrace de esa manera.

  

El StackTrace se crea con el   de la persona que llama hilo actual, y no lo hace   contener el nombre del archivo, número de línea, o   información de la columna.

Para obtener los números de línea , es necesario utilizar la sobrecarga que toma un bool, así como la excepción .

También es necesario archivos de símbolos (PDB) para los números de línea. Los archivos de símbolos están disponibles para ambos de depuración y las versiones de lanzamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top