gdb - Análisis de vuelco de Solaris Core
coredump dbx (8)
Uso pstack para analizar archivos de volcado de núcleo en Solaris
¿De qué otra manera puedo analizar el volcado del núcleo de Solaris?
¿Qué comandos se pueden usar para hacer esto?
¿Qué otra información estará disponible desde el vertedero?
GDB puede ser usado.
Puede dar la llamada que se intentó antes del volcado.
http://en.wikipedia.org/wiki/GDB
Tener la fuente es excelente y si puedes reproducir los errores aún mejor ya que puedes usar esto para depurarlo.
Funcionó muy bien para mí en el pasado.
El comando pflags también es útil para determinar el estado en que se encontraba cada subproceso cuando se volcó el núcleo. De esta manera, a menudo puede identificar el problema.
Adjunte a la imagen del proceso usando el depurador dbx:
dbx [nombre_archivo_ executable] [nombre_archivo_coredump]
Es importante que no haya cambios en el ejecutable dado que el núcleo fue objeto de dumping (es decir, no fue reconstruido).
Puede ver el trazado de la pila para ver dónde se colgó el programa con el comando dbx "where".
Puede subir y bajar la pila con los comandos "arriba" y "abajo", o saltar al marco de pila exacto con "marco [número]", con los números que se ven en la salida de "dónde".
Puede imprimir el valor de variables o expresiones con el comando "print [expr]".
Que te diviertas.
Supongo que cualquier respuesta a esta pregunta debería comenzar con una receta simple:
Para dbx, la receta es:
% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where
Si el volcado del núcleo es de un programa que escribió o compiló, use el depurador que normalmente usaría para depurar la aplicación en ejecución. Todos deberían poder cargar archivos centrales. Si no eres exigente con los depuradores y estás utilizando Solaris, te recomendaría dbx. Ayudará a obtener la versión más reciente de FCS de Sun Studio con parches, o bien la versión Express más reciente de Sun Studio. También es muy útil si puede cargar el archivo de núcleo en el depurador en el mismo sistema donde se creó el archivo de núcleo. Si el código en las bibliotecas es diferente de cuando se creó el archivo core, entonces el seguimiento de la pila no será útil cuando pase por las bibliotecas. Los depuradores también usan bibliotecas de SO de OS para comprender las estructuras de datos del enlazador libthread y runtime, por lo que si necesita cargar el archivo core en otra máquina, querrá asegurarse de que las bibliotecas auxiliares instaladas en el sistema operativo coincidan con las estructuras de datos del sistema. el sistema operativo. Puede encontrar todo lo que nunca quiso saber sobre estas bibliotecas del sistema en un documento técnico que se escribió hace unos años.
http://developers.sun.com/solaris/articles/DebugLibraries/DebugLibraries_content.html
Puede usar el depurador modular de Solaris, mdb o dbx. mdb viene con el paquete SUNWmdb (o SUNWmdb x para la versión de 64 bits).
Un archivo central es la imagen de su proceso en ejecución en el momento en que se estrelló.
Dependiendo de si su aplicación fue compilada con indicadores de depuración o no, podrá ver una imagen de la pila, por lo tanto, para saber qué función causó el núcleo, obtener el valor de los parámetros que pasaron a esa función, el valor de las variables, las zonas de memoria asignadas ...
En las versiones recientes de Solaris, puede configurar lo que contendrá el archivo central con el comando coreadm; por ejemplo, puede tener los segmentos de memoria asignados a los que se adjuntó el proceso.
Consulte la documentación de MDB y la documentación de dbx . La tarjeta de referencia rápida GDB también es útil una vez que conozca los conceptos básicos de GDB.
Encontré dbx en mi caja Solaris x86 en
/opt/SUNWspro/bin/dbx
¡Aclamaciones!
Sugiero probar primero con gdb, ya que, en mi opinión, es más fácil aprender tareas básicas que los depuradores nativos de Solaris.