Recientemente, se desplegó un proyecto en un entorno de producción y se descubrió que algunos métodos generaban mensajes anómalos
Sin embargo, solo se proporciona información de error anormal y no hay número de línea anormal, solo que hay un problema con la conversión del modelo en un determinado método
Pero déjame compararlos uno por uno, es demasiado molesto, ¿por qué no registrar el número de línea equivocado?
La configuración de log4net es la siguiente:
Escribí deliberadamente un mensaje de excepción en el método Home/Index en mi ordenador local para ver si el número de línea se registraría:
He comprobado que el archivo de registro de errores registra el número de línea, lo cual definitivamente no es un problema con la configuración de log4net, porque la configuración en ambos lados es la misma
¿Podría ser un problema con el modo de compilación???
Mi ordenador local está en modo depuración y la dll compilada por el servidor oficial está en modo release
Luego, cambié el proyecto local al modo de lanzamiento y vi que seguía siendo un número de línea de registro.
Luego, Baidu, la primera frase:Necesitas copiar el archivo .pdb correspondiente al dll”
¿Es esto un problema? Luego, fui directamente al directorio bin, borré el archivo .pdb correspondiente a la dll y refrescé la web, y encontré el registro de excepciones de la siguiente manera:
Efectivamente, el número de línea anormal no se registra!!!!
¿Es realmente un problema de .pdb? Necesitas conservar el archivo .pdb para que el número de línea quede registrado si es anormal!!
¿Para qué sirve un archivo PDB?
Archivos PDB: Lo que todo desarrollador debe saber
¿Qué es un archivo PDB?
La mayoría de los desarrolladores deberían saber que los archivos PDB se usan para ayudar con la depuración de software. Pero puede que no estemos familiarizados con cómo trabaja exactamente. Este artículo describe el almacenamiento y contenido de los archivos PDB. También describe cómo el depurador encuentra el archivo PDB correspondiente a binay y cómo encuentra el archivo de código fuente correspondiente a binay. Este artículo es para todos los desarrolladores nativos y gestionados.
Antes de empezar, definamos dos términos: compilación privada, que se usa para denotar una compilación generada en la propia máquina del desarrollador; Compilación pública, que significa una compilación generada en una máquina de compilación pública. La construcción privada es relativamente sencilla, porque PDB y binay están en el mismo lugar, y normalmente los problemas que tenemos tienen que ver con la construcción pública.
Lo más importante que todos los desarrolladores deben saber es que "los archivos PDB son tan importantes como el código fuente", sin lo cual ni siquiera puedes depurar. Para la compilación pública, el servidor de símbolos debe almacenar todos los PDB y, cuando el usuario reporta un error, el depurador puede encontrar automáticamente el archivo PDB correspondiente en binay, y tanto Visual Studio como Windbg saben cómo acceder al servidor de símbolos. Antes de almacenar PDB y binay en el servidor de símbolos, también necesitas indexar la ejecución de PDB en el código fuente, que es asociar PDB y fuente.
La siguiente parte asume que el Servidor de Símbolos y el Indexado del Servidor de Origen ya están configurados. TFS2010 se puede hacer tan sencillamente como indexar el código fuente y copiar el servidor de símbolos para una nueva versión.
2. El contenido del archivo PDB
Oficialmente comenzando el contenido de PDB, PDB no es un formato de archivo público, pero Microsoft proporciona una API para ayudar a obtener datos de PDB.
El PDB nativo de C++ contiene la siguiente información: * direcciones de funciones públicas, privadas y estáticas; * El nombre y la dirección de la variable global; * Nombres y desplazamientos de parámetros y variables locales en la pila; * definiciones de tipo de clase, estructura y datos; * Datos de omisión de puntero de trama para recorrer la pila nativa en x86; * El nombre y número de líneas en el archivo de código fuente;
El PDB de .NET contiene solo 2 partes de información: * Código fuente, nombre del archivo y número de líneas; * y el nombre de la variable local; * Todos los demás datos ya están incluidos en el archivo . NET;
|