Estos archivos son realmente útiles a la hora de depurar un programa, ya que nos ofrecen información de como se encontraba el mismo en el momento del fallo. Para utilizarlos, en primer lugar es necesario que el sistema tenga habilitada su generación, para lo cual usaremos el comando:
ulimit -c tamaño_maximo_en_bytes
Realmente con esto lo que hacemos es no poner límite al tamaño de los cores que se generen.
El comando ulimit permite variar otras cosas, como el número máximo de archivos abiertos por usuario/grupo.
Por defecto, el kernel nos generará el core dump con el nombre core, pero esto se puede modificar de forma permanente o solo mientras este el sistema arrancado.
No permanente
Modificamos el valor del archivo /proc/sys/kernel/core_pattern, donde podemos utilizar expresiones especiales que se expanden en ciertos valores útiles:- %% a single % character
- %p PID of dumped process
- %u (numeric) real UID of dumped process
- %g (numeric) real GID of dumped process
- %s number of signal causing dump
- %t time of dump, expressed as seconds since the Epoch (00:00h, 1 Jan 1970, UTC)
- %h hostname (same as nodename returned by uname(2))
- %e executable filename (without path prefix)
- %c core file size soft resource limit of crashing process (since Linux 2.6.24)
Ejemplo:
echo "core.%p-%t" > /proc/sys/kernel/core_pattern
Además, es posible enviar el dump a la entrada de otro programa a través de una tubería (pipe) utilizando argumentos para el programa, entre los que pueden estar variables como las que hemos visto antes.
Ejemplo:
echo "|nombre_programa argumento1 argumento2 %p %e"
(Los argumentos 3 y 4 serán el PID y el nombre del ejecutable causante del dump)
Permanente
Para hacer los cambios de manera permanente, deberemos editar el archivo /etc/syslog.conf, y añadir en él una línea como:kernel.core_pattern = patron_para_los cores
Donde el patrón se escribe de la misma forma que hemos visto anteriormente.
Este archivo permite configurar los valores de todos los archivos en /proc/sys, lo cual puede ser útil para otras muchas cosas además de los cores.
Para una información mas detallada y precisa consultar man core y man 5 sysctl.conf.
Por último, es posible generar core dumps de programas en ejecución con la orden gcore (ver man gcore).
No hay comentarios:
Publicar un comentario