Depuración de volcados de memoria de Linux
Este artículo se aplica a: ✔️ SDK de .NET Core 3.0 y versiones posteriores
Recopilación de volcados de memoria en Linux
Sugerencia
Para obtener preguntas más frecuentes sobre la recopilación del volcado de memoria, el análisis y otras advertencias, vea Volcados de memoria: Preguntas más frecuentes.
Las dos formas recomendadas de recopilar volcados en Linux son las siguientes:
- Herramienta de la CLI
dotnet-dump
- Variables de entorno que recopilan volcados de memoria al producirse bloqueos
Análisis de volcados de memoria en Linux
Después de recopilar un volcado de memoria, se puede analizar mediante la herramienta dotnet-dump
con el comando dotnet-dump analyze
. Este paso de análisis debe ejecutarse en una máquina que tenga la misma arquitectura y distribución de Linux que el entorno en el que se capturó el volcado de memoria.
La herramienta dotnet-dump
admite la visualización de información sobre el código de .NET, pero no es útil para comprender los problemas de código de otros lenguajes, como C y C++.
Como alternativa, se puede usar LLDB para analizar los volcados de memoria en Linux, ya que permite el análisis de código administrado y nativo. LLDB usa la extensión SOS para depurar el código administrado. La herramienta de la CLI dotnet-sos
se puede usar para instalar SOS, que tiene muchos comandos útiles para depurar código administrado. Para poder analizar los volcados de .NET Core, LLDB y SOS requieren los siguientes archivos binarios de .NET Core del entorno en el que se creó el volcado:
- libmscordaccore.so
- libcoreclr.so
- dotnet (host usado para iniciar la aplicación)
En la mayoría de los casos, estos archivos binarios se pueden descargar mediante la herramienta dotnet-symbol
. Si no se pueden descargar los archivos binarios necesarios con dotnet-symbol
(por ejemplo, si está en uso una versión privada de .NET Core creada a partir de un origen), puede que sea necesario copiar los archivos enumerados anteriormente desde el entorno en el que se creó el volcado. Si los archivos no se encuentran junto al archivo de volcado de memoria, puede usar el comando setclrpath <path>
de LLDB/SOS para establecer la ruta de acceso desde la que se deben cargar, y setsymbolserver -directory <path>
para establecer la ruta de acceso de los archivos de símbolos.
Una vez que están disponibles los archivos necesarios, el volcado de memoria se puede cargar en LLDB especificando el host de dotnet como el ejecutable que se va a depurar:
lldb --core <dump-file> <host-program>
En la línea de comandos anterior, <dump-file>
es la ruta de acceso del volcado de memoria que se va a analizar y <host-program>
es el programa nativo que inició la aplicación de .NET Core. Este suele ser el archivo binario dotnet
, a menos que la aplicación sea independiente, en cuyo caso es el nombre de la aplicación sin la extensión .dll.
Una vez que se inicia LLDB, puede que sea necesario usar el comando setsymbolserver
para apuntar a la ubicación de los símbolos correcta (setsymbolserver -ms
para usar el servidor de símbolos de Microsoft o setsymbolserver -directory <path>
para especificar una ruta de acceso local). Para cargar símbolos nativos, ejecute loadsymbols
. En este momento, puede usar comandos SOS para analizar el volcado de memoria.
Nota
LLDB se puede instalar con el comando sudo apt-get install lldb
.
Análisis de volcados de memoria en Windows
Los volcados recopilados de una máquina Linux también se pueden analizar en una máquina Windows mediante Visual Studio, Windbg o la herramienta dotnet-dump. Tanto Visual Studio como Windbg pueden analizar código nativo y administrado, mientras que dotnet-dump solo analiza código administrado.
Nota
Visual Studio 16.8 y versiones posteriores permite abrir y analizar volcados de memoria de Linux generados en .NET Core 3.1.7 o versiones posteriores.
- Visual Studio: consulte la guía de depuración de volcados de memoria de Visual Studio.
- Windbg: puede depurar volcados de memoria de Linux en windbg con las mismas instrucciones del volcado en modo de usuario de Windows. Use la versión x64 de windbg para los volcados recopilados de un entorno Linux x64 o Arm64 y la versión x86 para los de un entorno Linux x86.
- dotnet-dump: el volcado se ve mediante el comando dotnet-dump analyze. Use la versión x64 de dotnet-dump para los volcados recopilados de un entorno Linux x64 o Arm64 y la versión x86 para los de un entorno Linux x86.
Consulte también
- dotnet-sos para obtener más información sobre la instalación de la extensión SOS.
- dotnet-symbol para obtener más información sobre la instalación y el uso de la herramienta de descarga de símbolos.
- Repositorio de diagnósticos de .NET Core para obtener más información sobre la depuración, incluidas las preguntas más frecuentes.
- Instalación de LLDB para obtener instrucciones sobre la instalación de LLDB en Linux o Mac.
- Práctica y solución de problemas en Linux para ver el tutorial sobre la depuración de volcados de memoria en Linux