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
Si está utilizando una Sun JVM, conéctela con JConsole y vaya al panel de Subprocesos. Hay un botón "Detectar interbloqueo".
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.
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í.
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.
Yo recomendaría el uso de una herramienta de análisis estático como
, que a menudo puede detectar interbloqueos en tiempo de compilación hace
A los pocos minutos me encontré con este:
http://runnerwhocodes.blogspot.com/2007/10/deadlock-detection-with-eclipse.html
Para mí, parece que el mejor enfoque detecta puntos muertos (incluso no lo haría ayuda en cada caso, p. detectar deadlocks en combinación con EMT-Locks).
- 1. ¿Cuándo un punto muerto no es un punto muerto?
- 2. ¿Cómo depurar correctamente Java (Android) usando Eclipse?
- 3. Cómo causar un punto muerto
- 4. ¿Cómo provocar deliberadamente un punto muerto?
- 5. Punto muerto en ThreadPool
- 6. Punto muerto en ThreadPoolExecutor
- 7. Cómo depurar el servlet usando Eclipse
- 8. SqlException: Punto muerto
- 9. Punto muerto en Ruby join()
- 10. Punto muerto del semáforo
- 11. Depurar JavaScript en Eclipse
- 12. Cómo depurar en un dispositivo real (usando Eclipse/ADT)
- 13. Cómo depurar archivos .class en ECLIPSE?
- 14. punto muerto en código Java con semáforo y adquirir (int)
- 15. Depurar ServletContextListener.contextDestroyed() estableciendo el punto de ruptura en eclipse
- 16. Bloqueo de reentrada y punto muerto con Java
- 17. ¿Cómo puedo depurar un Doclet en Eclipse?
- 18. depurar un gran ciclo en eclipse
- 19. ¿Cómo encontrar AMBOS hilos de un punto muerto?
- 20. Ejecutar/depurar aplicación OSGi en Eclipse
- 21. ¿Cómo depurar usando gdb?
- 22. Patrones para manejar un punto muerto SQL en C#?
- 23. Cómo depurar el código compilado de Java en Eclipse
- 24. Depurar eclipse IDE en sí
- 25. Cómo usar Eclipse para depurar código JNI (Java y C++)
- 26. ¿cómo depurar los procesadores de anotación Java usando intellij?
- 27. ¿Hay alguna manera de depurar aplicaciones web usando Eclipse?
- 28. ¿Depurar PHP con Eclipse?
- 29. Intento de punto muerto de ActiveRecord3
- 30. Java + Eclipse: ¿cómo depurar un programa java que está recibiendo canalizado/redireccionado stdin?
YourKit tiene la mejor representación de hilos y, a veces, incluso puede detectar el punto muerto automáticamente. – nanda