.net - instalar - net core linux install
Cómo volcar una aplicación.NET Core en Linux (3)
La generación de linux coredumps se define por lo que está en /proc/sys/kernel/core_pattern
. Si ciertas señales (por ejemplo, SIGSEGV o SIGQUIT) hacen que un proceso termine, una imagen de la memoria del proceso se escribe básicamente en ese archivo. Si comienza con un símbolo de tubería |
, se puede transmitir a una aplicación que realiza un análisis de volcado. Está documentado aquí: http://man7.org/linux/man-pages/man5/core.5.html
Si lo configura así: echo coredump > /proc/sys/kernel/core_pattern
escribirá un archivo llamado coredump
en el directorio actual.
Si lo configuras así: echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
un archivo como /tmp/cores/core.bash.8539.drehbahn-mbp.1236975953
(consulte https://sigquit.wordpress.com/2009/03/13/the-core-pattern/ )
Como otros sugirieron, también configure ulimit -S -c unlimited
para permitir coredumps de cualquier tamaño.
Aquí hay una publicación de blog que muestra cómo crear y analizar .NET Core coredumps en linux: http://blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-dump-on-linux/
Tengo una aplicación .NET que he portado a .NET Core. Lo estoy probando en Ubuntu 14.04.
Estoy intentando averiguar cómo obtener un archivo .dmp o el equivalente de Linux cuando el programa falla. Llamo a Environment.FailFast
pero por lo que puedo decir, esto no genera un archivo .dmp como lo hace en Windows. De acuerdo con este caso, Environment.FailFast
debería estar creando un volcado, pero si es así, no puedo encontrarlo.
Además, he intentado crear manualmente un volcado utilizando gcore
. Esto funciona, sin embargo, lleva mucho tiempo generar el volcado (mi aplicación no es tan grande) y no puedo obtener las pilas de llamadas correctas en gdb después del hecho, como cuando apunto gdb a mi dll de la aplicación, no lo reconoce. .
¿Cuál es la mejor manera de obtener un volcado de una aplicación .NET Core en Linux?
¡Gracias!
Puedo obtener un volcado de memoria usando Environment.FailFast("core dump")
en mi código C #. Tal vez necesite establecer el tamaño y la ubicación del volcado del núcleo con ulimit -c unlimited
y echo coredump > /proc/sys/kernel/core_pattern
primero.
[xxx / tmp] $ ls core *
core.dotnet.10470
desea un volcado de núcleo, esto está integrado en el sistema operativo.
primero ulimit -Sc unlimited
como el usuario con el que desea ejecutar el proceso, así que le permite crear un archivo central de cualquier tamaño. Luego kill -4 <pid>
Esto debería generar el volcado de núcleo. Probablemente debería estar en el directorio desde donde se ejecutó el proceso.
Si no puede iniciar sesión como el usuario con el que se ejecuta la aplicación, deberá poner esto en limits.conf.