Pregunta

Además de leer el archivo GetFileName () y leer en la línea GetFileLineNumber () de un cuadro de pila de

new StackTrace(exception).GetFrame(x)

¿hay alguna forma de obtener la línea de código real (como una cadena) que causó una excepción?

Gracias

¿Fue útil?

Solución

La depuración posterior a la publicación es difícil, pero no imposible. Hay herramientas que puede usar ( aquí y aquí por ejemplo) así como técnicas .

Otros consejos

No lo creo. El código está compilado, por lo tanto ya no está disponible. Sin embargo, si también tiene el código fuente disponible, puede haber algunas soluciones.

No, esa es tu única opción, que yo sepa. Para obtener la línea de código original que causó la excepción, es necesario tener la fuente disponible. Que el StackFrame ya le permite obtener el número de línea (a través de los símbolos de depuración, el archivo PDB en la mayoría de los casos), lo hace bastante sencillo, diría yo.

¿Hay algún problema en particular con el método que sugirió?

No hay una manera confiable de hacer esto porque la información de línea no se almacena en archivos DLL. La información que asigna bloques de IL a líneas de código fuente se almacena dentro del archivo PDB. Necesitará acceder al PDB para obtener la información de la línea para una excepción.

Hay suficiente información sobre la clase StackFrame para obtener la clase ISymUnmanagedMethod apropiada si el PDB está disponible. Principalmente solo necesita el token del método y el desplazamiento actual en el método. Esto requiere que entiendas la estructura interna del PDB y no estoy seguro de que esté documentado en alguna parte.

API de PDB: http://msdn.microsoft.com/en- us / library / ms233503.aspx

Se compilaría, por lo que en el tiempo de ejecución solo tendría el IL. En el mejor de los casos, podría obtener el IL y descompilarlo de nuevo a C #, al igual que el reflector.

Puedes obtener una línea usando el bloque try catch :

catch(Exception exception) {
    //exception.StackTrace at the first line has the line you are looking for
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top