2012-06-20 2 views
1

Dans mon application Java, j'ai quelques blocs d'exceptions trycatch où j'essaie de piéger mes exceptions. Beaucoup d'entre eux sont manipulés et donc totalement transparents pour l'utilisateur, mais je voudrais créer un fichier de vidage contenant la valeur des variables et la pile d'appels entière afin que je puisse diagnostiquer ce qui a causé ce problème. Est-ce possible? Un bloc de code ne fonctionnait pas car il était censé être correct à l'avant, je voudrais déboguer l'application avec ces fichiers de vidage. Jusqu'ici, j'ai fait sans rien de pareil et il est presque impossible de déterminer ce qui a causé l'erreur.Création de vidages sur incident et de traces de pile dans Java

Merci.

+0

C'est ce que fait un débogueur. Dans votre IDE, à côté du bouton "Exécuter". –

Répondre

0

Vous devez utiliser un cadre de journalisation pour cette tâche. J'utilise normalement ceci: Apache Log4J et SLF4J. Vous pouvez enregistrer les valeurs de variables juste avant de consigner les exceptions susceptibles de provoquer le problème.

+0

J'ai beaucoup utilisé le framework de journalisation, mais un vidage de mémoire à part entière est une toute autre histoire. Je ne peux pas déboguer mon programme en utilisant les fichiers journaux. J'ai lu cela avec les dumps de mémoire, on pourrait déboguer l'état du programme tel qu'il était. –

+0

Vous pouvez enregistrer les valeurs de variables dans le fichier juste avant l'exception de journalisation. De cette façon, vous pouvez voir des valeurs variables. Je ne suis pas sûr que ce soit le meilleur moyen. –

0

La première chose à regarder est votre vidage de pile, ce qui est très utile pour diagnostiquer certains problèmes. Essayez d'envoyer un signal QUIT (en appuyant sur Ctrl- \ in terminal, ou kill commande) sur votre processus Java.

Vous pouvez également configurer JVM pour effectuer un vidage de tas lorsqu'une erreur de mémoire se produit, en passant l'option -XX: + HeapDumpOnOutOfMemoryError dans la ligne de commande. Une fois que vous faites cela, essayez d'élever un OutOfMemoryError dans votre code au bon moment.

+0

Essayez Ctrl-Break (au lieu de Ctrl - \\) dans MS Windows. – n0rm1e

+0

Ce n'est pas ce que je voulais dire. J'aurais dû être plus explicite. Vous voyez, quand j'ai publié mon application de bureau aux utilisateurs, je voudrais enregistrer quelque chose comme un état de mémoire-vidage/application quand une erreur interne se produit. L'utilisateur verrait un message du type "Une erreur interne s'est produite". et le fichier de vidage pourrait être envoyé à moi afin que je puisse enquêter sur ce qui a causé l'erreur. Ce que vous obtenez, comme je l'ai compris, est en cours de développement, si mon application tombe en panne, je peux inspecter le fichier de vidage. Droite? Merci. –

+0

Vous pouvez effectuer un vidage mémoire à la demande, en utilisant certains utilitaires JVM, mais ils doivent être appelés à partir d'un autre processus (parent peut-être) et doivent être préalablement installés sur la machine de l'utilisateur. Quelque chose comme ceci peut vous aider: jmap -heap: format = b -d64 n0rm1e

Questions connexes