2010-01-17 27 views
9

Qué técnicas se pueden usar para depurar lo que parece ser un punto muerto en un programa Java. Mi IDE es Eclipse y creo que he identificado los dos hilos en punto muerto. En el depurador, al hacer clic con el botón derecho en cualquiera de los hilos en cuestión y seleccionar suspender, se suspende el hilo y se muestra el código que se está ejecutando actualmente. Parece que el intento de entrar o salir de la línea no tiene ningún efecto: el estado del subproceso cambia a "Avanzar" y el control nunca vuelve al depurador a menos que se vuelva a hacer clic en suspender.
GraciasCómo depurar un punto muerto en Java usando Eclipse

Respuesta

10

Si está utilizando una Sun JVM, conéctela con JConsole y vaya al panel de Subprocesos. Hay un botón "Detectar interbloqueo".

0

No sé sobre eclipse pero lo que estás buscando es un generador de perfiles. Consulte JProfiler o eche un vistazo a this list por ejemplo. El generador de perfiles se conecta directamente con la JVM y visualiza lo que sucede dentro de su programa en tiempo real. Cuando se producen bloqueos, se obtienen pistas visuales/textuales sobre qué hilos están en conflicto.

+1

YourKit tiene la mejor representación de hilos y, a veces, incluso puede detectar el punto muerto automáticamente. – nanda

1

Al ejecutar el programa en "modo de consola", puede presionar ctrl+break, lo que le da un vuelco de hilo. Una vez que te encuentras con el punto muerto, esto podría ser útil. Si el punto muerto no aparece con demasiada frecuencia, podría ser difícil atrapar el punto muerto así.

0

La ventana de depuración que muestra las pilas de varios subprocesos indicará cuándo se detiene un subproceso. Cuando se detienen dos hilos, puede examinar lo que cada uno está esperando. Encontrar algo en común te dirá la fuente del punto muerto.

-1

Yo recomendaría el uso de una herramienta de análisis estático como

FindBugs

, que a menudo puede detectar interbloqueos en tiempo de compilación hace

Cuestiones relacionadas