Quiero crear un volcado del núcleo cada vez que se bloquea mi proceso. Actualmente estoy siguiendo este enfoque:Volcado del núcleo en Linux
- Cree una versión especial de "depuración" del programa utilizando "-g" de gcc/g ++.
- Ejecutar "ulimit -c unlimited"
- Ahora obtenemos el volcado del núcleo cada vez que el programa falla.
Pero yo quiero minimizar el número de pasos de modo que:
- volcado del núcleo deben conseguir siempre creados. Incluso si se trata de una versión de "lanzamiento". No se le debe pedir al usuario que ejecute el comando "
ulimit -c unlimited
" manualmente. - Ese backtrace del volcado del núcleo debe poder dar el archivo, la función, el número de línea de las llamadas. Esa es la traza de pila en una forma legible por humanos.
- No quiero construir el programa como una versión de depuración con "-g". O al menos no debería contener ninguna otra información de depuración que no sea necesaria para generar el rastreo de pila legible por el ser humano. Porque esto sería una versión de lanzamiento del programa.
así que tengo dos preguntas:
- cómo crear un volcado de memoria en la construcción de "liberación" de un programa?
- Siempre. Sin ejecutar manualmente el "
ulimit -c unlimited
"
Es importante entender que los niveles de '-g' y optimización son completamente ajenos. '-g' significa que la información de depuración se agregará al binario. No significa que el código no será optimizado. 'gcc -g -O3 ...' es una cosa perfectamente razonable que hacer (en el entendimiento de que el código puede ser un poco más difícil de depurar). –
Bueno, porque a veces los bloqueos son muy difíciles de reproducir. Y los errores no siempre son predecibles, ¿verdad? Esa vez no quiero perder la información. – Sabya
Incluso con la optimización, una traza de pila por lo general parece dar la función correcta (si no necesariamente la línea correcta). Por lo general, no está muy lejos. Al menos esa es mi experiencia. – MarkR