Question

J'utilise pstack pour analyser les fichiers de vidage principaux dans Solaris

Sinon, comment puis-je analyser le core dump de Solaris?

Quelles commandes peuvent être utilisées pour cela?

Quelles autres informations seront disponibles sur le dump?

Était-ce utile?

La solution

Vous pouvez utiliser le débogueur, mdb ou dbx modulaire Solaris. mdb est livré avec le package SUNWmdb (ou SUNWmdb x pour la version 64 bits).

Un fichier de base est l’image de votre processus en cours au moment de son crash.

Selon que votre application a été compilée avec des indicateurs de débogage ou non, vous pourrez afficher une image de la pile et connaître ainsi la fonction qui a provoqué le cœur. Obtenir la valeur des paramètres transmis à cette fonction. , la valeur des variables, les zones mémoire allouées ...

Sur les versions récentes de Solaris, vous pouvez configurer le contenu du fichier core à l’aide de la commande coreadm. Par exemple, vous pouvez associer les segments de mémoire mappés auxquels le processus a été associé.

Reportez-vous à la documentation MDB et à documentation dbx . La carte référence rapide GDB est également utile lorsque vous connaissez les bases de la GDB.

Autres conseils

Je suppose que toute réponse à cette question devrait commencer par une recette simple:

Pour dbx, la recette est la suivante:

% dbx a.out core
(dbx) where
(dbx) threads
(dbx) thread t@3
(dbx) where

Si le core dump provient d'un programme que vous avez écrit ou créé, utilisez le débogueur que vous utiliseriez normalement pour déboguer l'application en cours d'exécution. Ils devraient tous être capables de charger des fichiers de base. Si vous n'êtes pas pointilleux sur les débogueurs et que vous utilisez Solaris, je vous recommanderais dbx. Cela vous aidera à obtenir la dernière version FCS de Sun Studio avec les correctifs ou la dernière version Express de Sun Studio. Il est également très utile de pouvoir charger le fichier principal dans le débogueur sur le même système que celui où le fichier principal a été créé. Si le code dans les bibliothèques est différent de celui utilisé lors de la création du fichier principal, la trace de pile ne sera pas utile lorsqu’elle passera dans les bibliothèques. Les débogueurs utilisent également des bibliothèques auxiliaires de système d'exploitation pour comprendre les structures de données de libthread et de l'éditeur de liens d'exécution. Par conséquent, SI vous devez charger le fichier principal sur une machine différente, vous devez vous assurer que les bibliothèques auxiliaires installées sur le système d'exploitation correspondent aux structures de données du système. l'OS. Vous pouvez trouver tout ce que vous n'avez jamais voulu savoir sur ces bibliothèques système dans un livre blanc rédigé il y a quelques années.

http://developers.sun.com/solaris/articles/DebugLibraries /DebugLibraries_content.html

Je suggérerais d'essayer d'abord gdb car il est plus facile d'apprendre les tâches de base que les débogueurs natifs Solaris, à mon avis.

GDB peut être utilisé.

Il peut donner l'appel qui a été tenté avant le vidage.

http://sourceware.org/gdb/

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

Avoir la source est excellent et si vous pouvez reproduire les erreurs encore mieux car vous pouvez l’utiliser pour le déboguer.

A bien fonctionné pour moi dans le passé.

La commande pflags est également utile pour déterminer l’état de chaque thread lors de son vidage principal. De cette façon, vous pouvez souvent identifier le problème.

Attachez-vous à l'image du processus à l'aide du débogueur dbx:

dbx [nom_fichier_exécutable] [nom_fichier_coredump]

Il est important que l'exécutable n'ait pas été modifié depuis le vidage du noyau (c'est-à-dire qu'il n'a pas été reconstruit).

Vous pouvez voir le suivi de la pile pour savoir où le programme a échoué avec la commande dbx "où".

Vous pouvez monter et descendre dans la pile avec la commande "up". et "vers le bas", ou passez au cadre de pile exact avec "cadre [nombre]", avec les nombres vus dans la sortie de "où".

Vous pouvez imprimer la valeur des variables ou des expressions avec "print [expr]". commande.

Amusez-vous.

J'ai trouvé dbx sur ma boîte solaris x86 à

/opt/SUNWspro/bin/dbx

Salut!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top