Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 5902|Respuesta: 1

[.NET Core] [Combate real]. Los bloqueos y excepciones de aplicaciones NET/C# generan automáticamente archivos de volcado DMP

[Copiar enlace]
Publicado el 6-11-2022 22:41:42 | | | |
Requisitos: Al desarrollar aplicaciones usando .NET/C#, es imposible que ningún desarrollador garantice una ejecución estable y robusta del programa, lo cual puede estar relacionado con la lógica del código del desarrollador o con el entorno en ejecución del usuarioNo hay garantía al 100% de que la aplicación que desarrolles no tenga problemasNo es terrible tener un problema, pero lo terrible es que hay un problema que no puede encontrar la causa ni resolverla.

Si la aplicación no se ejecuta como se espera y se produce una salida anormal, ¿cómo puede generarse automáticamente un archivo de volcado DMP para solucionar el problema?
Un volcado es un archivo que contiene una instantánea del proceso cuando fue creado y puede usarse para comprobar el estado de la aplicación. Cuando es difícil adjuntar un depurador a una aplicación .NET, como un entorno de producción o CI, puedes usar volcados para depurar la aplicación. El uso de volcados captura el estado de los procesos problemáticos, y el estado puede comprobarse directamente sin detener la aplicación.

Recoger los volcados

Puedes usar variables de entorno para configurar tu aplicación y que recoja volcados en caso de fallo. Esto es útil si quieres saber la causa del fallo. Por ejemplo, capturar volcados cuando se lanza una excepción ayuda a identificar problemas comprobando el estado de la aplicación si falla.

La siguiente tabla muestra las variables de entorno que puedes usar para configurar tu aplicación y que recoja volcados en caso de fallo.

Variable de entorno
ilustrar
Predeterminado
COMPlus_DbgEnableMiniDump o DOTNET_DbgEnableMiniDumpSi está en 1, activa la generación de volcados de núcleos.0
COMPlus_DbgMiniDumpType o DOTNET_DbgMiniDumpTypeEl tipo de vertedero que hay que recoger. Consulta la tabla a continuación para más detalles2 (MiniDumpWithPrivateReadWriteMemory)
COMPlus_DbgMiniDumpName o DOTNET_DbgMiniDumpNameEscribe la ruta del archivo hasta el volcado. Asegúrate de que el usuario que ejecuta el proceso dotnet tenga acceso de escritura al directorio especificado./tmp/coredump.<pid>
COMPlus_CreateDumpDiagnostics o DOTNET_CreateDumpDiagnosticsSi está configurado en 1, activa el registro de diagnóstico para el proceso de volcado.0
COMPlus_EnableCrashReport o DOTNET_EnableCrashReport(Requiere .NET 6 o posterior) Si se configura en 1, el tiempo de ejecución genera un informe de fallo con formato JSON que incluye información sobre los hilos y tramas de pila de la aplicación fallida. El nombre del informe de fallo es la ruta/nombre de volcado añadido a .crashreport.json.
COMPlus_CreateDumpVerboseDiagnostics o DOTNET_CreateDumpVerboseDiagnostics(Requiere .NET 7 o posterior) Si está configurado en 1, activa el registro diagnóstico detallado del proceso de volcado.0
COMPlus_CreateDumpLogToFile o DOTNET_CreateDumpLogToFile(se requiere .NET 7 o posterior) Debe escribirse la ruta del archivo hacia el mensaje de diagnóstico. Si no se configura, se escribe un mensaje de diagnóstico en la consola de la aplicación defectuosa.

Para estas variables de entorno, .NET 7 estandariza el prefijo DOTNET_ en lugar de COMPlus_. Sin embargo, el prefijo COMPlus_ seguirá funcionando correctamente. Si lo eresEn versiones anteriores del entorno .NET, las variables de entorno deberían seguir usando el prefijo COMPlus_



Crear una nueva prueba de aplicación .NET Core 6

Utiliza VS 2022 para probar una nueva prueba de aplicación .NET Core 6 con el siguiente código:

Inicia el programa usando el comando cmd, como se muestra en la imagen de abajo:

COMPlus_EnableCrashReport=1
COMPlus_DbgEnableMiniDump=1
COMPlus_DbgMiniDumpName="C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp"
COMPlus_CreateDumpDiagnostics=1
Excepción no gestionada. Sistema.Excepción: itsvse.com
   en el Programa. <Main>$(String[] args) en C:\Users\itsvse_pc\source\repos\WindowsFormsApp1\DumpDemo\Program.cs:línea 9
[createdump] Escribiendo minidump con heap al archivo C:\Users\itsvse_pc\AppData\Local\Temp\NET\test.dmp
[createdump] Volcado escrito con éxito



Puedes ver que después de que el programa se bloquee de forma anormal, tiene éxito bajo el directorio que especificamosSe genera el archivo de volcado .dmpEn cuanto a cómo analizarlo, es otra historia.

Configuración universal de la plataforma Windows

En Windows, el Informe de Errores de Windows (WER) puede configurarse para generar volcados cuando una aplicación se bloquea.

Este método funciona para todos los programas, no solo para . programas .NET, como C++, Go, etc.; Y y. RED. Versión de NET Core

  • ¡Abierto regedit.exe
  • Abre el directorio HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
  • Crea una carpeta de volcado KEY de tipo REG_EXPAND_SZ para configurar el directorio donde se almacenan los archivos de volcado
  • También puedes crear un KEY DumpCount de tipo REG_DWORD configurar la cantidad total de volcados




Por supuesto, también puedes configurarlos usando comandos de PowerShell:

Según la configuración anterior, si el programa sale de forma anormal, creará un volcado del programa en el directorio %LOCALAPPDATA%\CrashDumps.

Recursos:

El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.




Anterior:Explicación detallada de las reglas de almacenamiento para imágenes de archivos adjuntos de Discuz, imágenes de avatar e imágenes de álbumes
Próximo:Operación práctica: Utilizar BundleTransformer para reemplazar System.Web.Optimization
 Propietario| Publicado el 6-11-2022 22:44:06 |
Enviar archivos de volcado:

Una vez que inicia el programa, determina si el directorio tiene un archivo volcado generado; si es así, envía el archivo a la interfaz especificada y luego elimínalo.
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com