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.
Mi solución
Copie el archivo pdb en la misma carpeta que el archivo ejecutable.
ahora puedo ver el número de línea cuando ejecuto el archivo exe.
esta es razon
http://msdn.microsoft.com/en-us/library/ee416588%28v=vs.85%29.aspx
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
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.
// file name }
- 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