Jusqu'à présent, j'ai appris à générer des vidages de fil et de tas de tas en utilisant Toutefois, Ce que je veux réellement, c'est de pouvoir voir la pile, de passer à un cadre de pile en particulier et de regarder des variables locales. Ce type de débogage post-mortem peut être effectué normalement avec des outils tels que WINDBG, GDB et un fichier principal (pour un programme natif C ++.) P>
Je me demande si un tel fichier "Core" (qui me permettra de déboguer dans un environnement non vivant) existe en Java? P> jstack code> et et
jmap code> respectivement. p>
Jstack code> Dump ne contient que des textes décrivant la pile sur chaque thread. Et ouvrir la vidage du tas (fichier .HProf) avec Java Visualvm affiche uniquement les objets alloués dans le tas. P>
4 Réponses :
Je ne pense pas que ce mécanisme de décharge existe dans Java standard. P>
J'ai trouvé des informations pertinentes dans un Sun Forum et dans un Discussion : Je n'ai pas eu beaucoup de chance avec ça, mais ça pourrait fonctionner dans votre cas. P>
Remarque: Certains des outils mentionnés sont des outils Java, mais ne sont pas pris en charge et ne sont pas disponibles sur les versions Windows de la JDK. P>
Merci. Je pense que jsadebugd code> est très proche de ce que je cherche.
Java fait. Si vous utilisez une machine virtuelle IBM, utilisez Vous pouvez également ajouter com.ibm.jvm.dump.systemdump () code> pour générer programme de manière programmable. Cela peut être débigué à l'aide d'un débogueur. Je crois que "tuer" votre processus Java devrait générer un dépotoir système aussi. Pour UNIX UTILISATION
KILLE -4 PID CODE> Lorsque PID est l'ID de processus et pourrait être interrogé en tapant dans
haut | grep java code> si vous avez 1 instance VM en cours d'exécution. p>
-xdump: système code> ou
-xdump: tas code> etc sur votre ligne de commande Java pour filtrer les événements et générer des décharges sur certains événements tels que VM STOP (< Code> -XDummp: Système: Événements = VMSTOP CODE>), Collections de déchets complets (
-XDump: Système: Événements = FullGC CODE>), etc. Remarque, en fonction de la taille de votre tas, générer un vidage Sur une GC complète n'est peut-être pas une bonne idée (c'est-à-dire que vous pouvez créer 50 décharges avec 20 secondes si vous salifiez de 4 m à environ 60 m en 20 secondes) afin que vous puissiez ajouter un compteur comme
-xdump: Système: événements = FullGC, plage = 50..55 code> qui générerait 5 cœurs entre le 50ème à la 55ème poubelle complète. P>
Certains systèmes d'exploitation (par exemple, Solaris MDB ou GDB sur Linux) en prise en charge à l'aide du débogueur natif normal sur les fichiers de vidage, avec un support spécial pour montrer des cadres de pile Java. Mais c'est assez hardcore et probablement pas ce que vous voulez, car il n'est pas bien intégré au débogueur Java. P>