c# .net visual-studio stack-trace line-numbers

c# - Mostrar el número de líneas en Stack Trace para el ensamblado de.NET en modo Release



visual-studio stack-trace (8)

¿Hay alguna manera de mostrar las líneas en el seguimiento de la pila para la compilación / implementación del ensamblado de .NET en el modo de lanzamiento?

ACTUALIZAR:

Mi aplicación se divide en tres proyectos de biblioteca de clase y un proyecto de "sitio web" de ASP.NET. El error que trato de rastrear está en uno de los tres proyectos de biblioteca de clase. Solo implementé el archivo pdb para el proyecto de biblioteca de clase que está generando el error "Referencia de objeto no configurado a una instancia de un objeto".

Los números de línea aún no aparecen en el seguimiento de la pila. ¿Debo implementar los archivos pdb para que todos los proyectos obtengan los números de línea en el seguimiento de la pila?

Solución de trabajo

La implementación del archivo pdb para cada aplicación solucionó el problema del número de línea.


En VS 2008 Express, lo encontré en Propiedades del proyecto -> Compilar -> Opciones de compilación avanzadas.


En VS2012, debe desmarcar "Excluir símbolos de depuración generados" en la sección Paquete / Publicar web de las propiedades también.


Esto funciona todo el tiempo. Solo necesita subscribir el mensaje de seguimiento de la pila. ¡Real Easy! Además, en vb.net debe hacer "Mostrar todos los archivos" e incluir el pdb.

''Err is the exception passed to this function Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5) Dim i As Integer = 0 While i < lineGrab.Length If (IsNumeric(lineGrab(i))) Then lineNo.Append(lineGrab(i)) End If i += 1 End While ''LineNo holds the number as a string

Versión C #:

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5); int i = 0; int value; while (i < lineGrab.Length) { if (int.TryParse(lineGrab[i].ToString(), out value)) { strLineNo.Append(lineGrab[i]); } i++; }


Incluya símbolos de depuración con su paquete de compilación / implementación.


Me he encontrado con problemas en el pasado donde siento la necesidad de implementar archivos PDB con una compilación de lanzamiento para rastrear un error. La razón es, como dijiste, fue que la excepción ocurrió en un método que era muy grande y no pude determinar con precisión dónde estaba sucediendo.

Esto podría ser una indicación de que el método debe ser refactorizado en métodos más pequeños y más granulares. No es una respuesta única para todos, pero este enfoque me ha sido útil a corto plazo (a menudo he encontrado el error durante la refactorización) y, a largo plazo.

Solo un pensamiento.



try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
Además, incluya el archivo .pdb (de la carpeta bin) en la implementación para obtener una excepción completa; de lo contrario, solo mostrará el nombre del método donde se produce la excepción.


  • Vaya a la ventana de Propiedades para el proyecto donde desea ver los números de línea de seguimiento de la pila.
  • Haga clic en la pestaña vertical "Crear".
  • Seleccione la configuración "Liberar". Compruebe el parámetro constante DEBUG.
  • Desmarque el parámetro "Optimizar código" para evitar el problema de rastreo ocasional con el código en línea (este paso no es esencial).
  • Presione el botón Avanzado ... y elija Salida -> Información de depuración -> solo pdb.
  • Implemente el archivo .pdb generado con el ensamblado.

Implementado con el comentario a continuación:

  • Otra cosa que debe verificar es en la sección "Paquete / Publicar web" que la casilla "Excluir símbolos de depuración generados" también está desmarcada