Thread dump par programme /JDI (Java Interface de Débogueur)
J'aime pour générer un thread dump de la programmation. J'ai appris qu'il ya essentiellement deux façons de le faire:
- Utiliser la "Machine Virtuelle Java de l'Interface de l'Outil" JVM-TI
- Utiliser les plus abstraites "Débogueur Java Interface" JDI
Pour la JVM-TI j'ai été en mesure de trouver des informations utiles, mais j'aurais à écrire un JNI-DLL qui, au moins pour le moment, je tiens à éviter. Avec le JDI je peux utiliser Java et il semble que je suis capable de l'utiliser dans l'application. Mais je n'étais pas en mesure de trouver une sorte de tutoriel ou un HOWTO pour elle. La seule documentation que j'ai pu trouver, ont été la Java-Docs http://java.sun.com/j2se/1.5.0/docs/guide/jpda/jdi/ ce qui n'est pas très utile, car elle permet de ne pas me montrer comment utiliser cette classe.
Donc, quelqu'un connais un bon tutoriel/livre que j'ai pu lire?
Merci pour toute aide!
Vous devez vous connecter pour publier un commentaire.
Avez-vous pensé à la télécommande de rechange ? I. e. VisualVM
jps et jstack sont aussi des outils utiles inclus dans le JDK 5, offrant un accès rapide méthode de ligne de commande pour obtenir les traces de pile de tous les threads en cours.
Cet article suggèrent JDI est également utilisé comme un l'outil à distance.
Donc je ne suis pas sûr que vous pouvez déclenche un thread dump au sein de votre propre programme, au lieu de trouver une façon d'envoyer à vous-même un le signal SIGQUIT (tuer -3) sur les plates-formes Unix, ou appuyez sur les touches Ctrl-\ clés sur Unix ou Ctrl-Pause sur les plates-formes Windows.
Plus, JDI n'était pas destiné à être utilisé pour déboguer le même processus dans lequel le JDI client est en cours d'exécution. Encore ce fil, j'ai un lien est le plus proche que j'ai trouvé pour utiliser effectivement JDI au sein du même programme.
Il existe une troisième voie: Thread.getAllStackTraces()
http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#getAllStackTraces()
C'est beaucoup plus facile que le débogueur de l'interface...
Vous pouvez obtenir à peu près tout le Fil info dont vous avez besoin, y compris les blocages de http://java.sun.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html
Fil.getAllStackTraces() décharges seulement la trace d'exécution de tous les threads, mais ne donne pas les informations de l'objet des verrous qui ont été obtenus par un fil ou un verrou sur un thread est en attente. Fondamentalement, nous ne serez pas en mesure de cerner les blocages avec cette.