2010-01-17 17 views
9

Quali tecniche è possibile utilizzare per eseguire il debug di ciò che sembra essere un deadlock in un programma Java. Il mio IDE è Eclipse e penso di aver identificato i due thread bloccati. Nel debugger, facendo clic con il tasto destro su uno qualsiasi dei thread in questione e selezionando suspend sospende il thread e viene visualizzato il codice attualmente in esecuzione. Il tentativo di entrare o uscire dalla riga non sembra avere alcun effetto - lo stato del thread cambia in "Stepping" con il controllo che non ritorna mai al debugger a meno che non venga fatto nuovamente clic su suspend.
GrazieCome eseguire il debug di un deadlock in Java utilizzando Eclipse

risposta

10

Se si utilizza Sun JVM, collegarlo con JConsole e accedere al riquadro Thread. C'è un pulsante "Rileva deadlock".

0

Non so su eclipse ma quello che stai cercando è un profiler. Acquista JProfiler o dai un'occhiata a this list per esempio. Il profiler si collega direttamente alla JVM e visualizza ciò che accade all'interno del tuo programma in tempo reale. Quando si verificano deadlock, ottieni indizi visivi/testuali di quali thread sono in conflitto.

+1

YourKit ha la migliore rappresentazione dei thread e talvolta può anche rilevare automaticamente il deadlock. – nanda

1

Quando si esegue il programma in "modalità console", è possibile premere ctrl+break, che fornisce un dump del thread. Questo potrebbe essere utile una volta che ti sei imbattuto nella situazione di stallo. Se il deadlock non appare troppo spesso, potrebbe essere difficile comunque ottenere lo stallo come questo.

0

La finestra di debug che mostra le pile dei vari thread indicherà quando si interrompe un thread. Quando vengono interrotti due thread, è possibile esaminare ciò che ciascuno sta aspettando. Trovare qualcosa in comune ti dirà la fonte della situazione di stallo.

-1

Ti consiglio di utilizzare uno strumento di analisi statica come

FindBugs

, che spesso può rilevare deadlock a tempo di compilazione

Problemi correlati