2008-09-22 16 views
17

utilizo pstack para analizar los archivos de volcado de núcleo en SolarisSolaris de vaciado de análisis

¿Qué más puedo analizar el volcado de memoria de Solaris?

¿Qué comandos se pueden usar para hacer esto?

¿Qué otra información estará disponible en el volcado?

Respuesta

17

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 de núcleo 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, de ahí para saber qué función causó el núcleo, para obtener el valor de los parámetros que se pasaron a ese función, el valor de las variables, las zonas de memoria asignadas ...

En las versiones recientes de Solaris, puede configurar lo que el archivo central contendrá con el comando coreadm; por ejemplo, puede tener los segmentos de memoria asignados a los que se adjuntó el proceso.

Consulte MDB documentation y dbx documentation. La tarjeta GDB quick reference también es útil una vez que conozca los conceptos básicos de GDB.

+2

El depurador modular de Solaris es fantástico y cuando se usa con libumem es una herramienta muy poderosa. http://blogs.sun.com/pnayak/entry/finding_memory_leaks_within_solaris – Matt

+0

Este blog lo ayuda a usar mdb para analizar un núcleo en Solaris: http://cuddletech.com/blog/pivot/entry.php?id=965 –

1

GDB puede ser utilizado.

Puede dar la llamada que se intentó antes del volcado.

http://sourceware.org/gdb/

http://en.wikipedia.org/wiki/GDB

Tener la fuente es grande y si se puede reproducir los errores aún mejor como se puede usar esto para depurarlo.

Funcionó muy bien para mí en el pasado.

1

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.

1

Acople a la imagen del proceso utilizando el depurador dbx:

dbx [executable_file_name] [coredump_file_name]

Es importante que no hubo cambios en el ejecutable desde que se descargó el núcleo (es decir, que no era' reconstruido).

Puede ver el seguimiento 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 "imprimir [expr]".

Diviértete.

3

Si el volcado del núcleo es de un programa que escribió o compiló, utilice 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

+0

pstack hace el trabajo. –

3

supongo que cualquier respuesta a esta pregunta debe comenzar con una receta sencilla:

de DBX, la receta es:

% dbx a.out core 
(dbx) where 
(dbx) threads 
(dbx) thread [email protected] 
(dbx) where 
1

encontré dbx en mi caja de Solaris x86 en

/opt/SUNWspro/bin/dbx 

¡Salud!

1

Sugeriría probar primero gdb, ya que es más fácil aprender tareas básicas que los depuradores nativos de Solaris en mi opinión.