¿Cómo veo el archivo CoreDump?

13

Al informar un error de un bloqueo, el error se hace privado y un archivo llamado CoreDump.gz. La documentación de Bug Triage dice lo siguiente:

Si el bloqueo aún tiene un archivo adjunto CoreDump.gz, entonces no fue posible obtener automáticamente un seguimiento de pila completamente simbólico y verificar si hay duplicados.

Stacktrace.txt parece legible por un humano. ¿Cómo puedo entender el significado de una traza de pila? CoreDump dentro de CoreDump.gz no parece legible para los humanos. ¿Qué es un "rastro de pila completamente simbólico"? ¿Cuál es la diferencia entre un "rastro de pila totalmente simbólico" ¿Cómo puedo ver el contenido de un archivo CoreDump? (Probé 'gato', pero no está limpio)

komputes
fuente

Respuestas:

15

Coredump.gz es la memoria (comprimida) accesible por el programa que se bloqueó. Es un archivo binario. Los Coredumps son un tesoro escondido, con todo tipo de datos privados para extraer.

Los coredumps se pueden ver ejecutando 'gdb':

gdb --core=mycoredump

Por supuesto, aún necesitará los paquetes de depuración asociados con este núcleo.

Puede, entonces, generar un seguimiento de pila mediante:

(gdb) bt

para generar un seguimiento de pila del subproceso actual, sin resolución de parámetro, o

(gdb) thread apply all bt full

para generar un seguimiento de todos los subprocesos en el coredump, con resolución de parámetros.

stacktrace y full stacktraces muestran el flujo de control dentro de un programa. Para Python, la parte superior del stacktrace muestra la llamada más antigua, con la más reciente en la parte inferior; para casi todo lo demás, la parte superior es la llamada más reciente y la inferior la más antigua.

Un seguimiento completo de la pila no solo mostrará el flujo, sino también los valores del parámetro. Aquí es donde usualmente encontramos datos privados, por ejemplo, digamos que ve una función llamada "validatePassword" con un parámetro llamado "Password" y un valor de "MySecretPassword" ...

Los Stacktraces generalmente solo son útiles si los paquetes de depuración están instalados (para que los marcos de la pila puedan resolverse en algo que podamos leer fácilmente). El análisis de un stacktrace requerirá que uno tenga las fuentes que se usaron para construir esta instancia específica del programa.

hggdh
fuente
CoreDump es un archivo binario, pero ¿cómo puede verlo? Los Stacktraces solo son útiles si los paquetes de depuración están instalados, entonces ¿por qué apport informa lo contrario?
komputes
1
El archivo CoreDump no está destinado a ser visto, está destinado a ser usado para depurar en gdb. Debe tener una máquina que ejecute la misma versión del software (y todas las dependencias) que genere el bloqueo y tenga los paquetes de depuración, luego puede usar lo que Carlos publicó anteriormente para obtener el seguimiento de la pila.
Stgraber
2
Ahora, en cuanto a por qué sigue siendo relevante para apport, es porque apport tiene un montón de "retractores" que toman su coredump, instalan los paquetes de depuración en una caja en el DC y luego adjuntan el stacktract completo al informe de error.
Stgraber
Documentación adicional: gnu.org/software/gdb/documentation
komputes
Documentación adicional: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes