2010-12-02 26 views
112

¿Es posible realizar la ejecución inversa en el depurador Eclipse? El proyecto actual en el que estoy trabajando requiere un mínimo de 5 segundos para leer e inicializar los datos de un archivo antes de que se pueda hacer algo. Si sobre paso en el depurador, tengo que finalizar el programa y reiniciar, y esto lleva bastante tiempo.¿Cómo retroceder en el depurador de Eclipse?

Respuesta

120

Puede usar el comando drop to frame de Eclipse para volver a ingresar el método actual desde la parte superior. Pero no desenrollará ningún cambio de estado que haya sucedido, por lo que puede no funcionar dependiendo del tipo de método en el que se encuentre.

Otra herramienta realmente genial que realmente le permite avanzar y retroceder en el tiempo es la Omniscient Debugger. Funciona al instrumentar las clases a medida que se cargan en el cargador de clases, por lo que puede registrar todo lo que hace su código. Puede hacer cosas muy interesantes, como responder "cuándo, dónde y por qué se asignó este campo a su valor actual". La interfaz de usuario es bastante torpe, y puede ser difícil manejar grandes bases de código, pero en algunos casos puede ahorrar mucho tiempo.

actualización: Chronon proporciona un producto comercial que se describe como un "DVR para Java", que parece hacer un montón de las mismas cosas que el ODB.

+6

+1, drop to frame es lo que quieres probar. –

+0

@Matt McHenry Estaba tratando de usar ODB1.5; con un programa java independiente, pero no estoy seguro de cómo hacerlo funcionar? ¿Tiene algún otro recurso que no sea el sitio de ODB que explique los pasos para hacerlo funcionar de manera independiente y con Eclipse? – Ayusman

+0

@Ayusman: no, lo siento, no tengo nada para compartir más allá de lo que está en el sitio de ODB. No me sorprendería si no funciona con los formatos de archivo .class más nuevos, entre otras cosas. :( –

3

Estaba buscando esta característica en Eclipse también. Sé que el estudio visual puede hacer eso. En realidad, puede arrastrar el marcador de línea actual y volver a colocar en cualquier parte del código. No estoy muy seguro de si los cambios en las variables se pueden deshacer. Pero aún así es muy útil y ahorra mucho tiempo. He estado esperando esto en eclipse por mucho tiempo.

44

Más allá de lo que se ha mencionado en respuestas anteriores - es decir, caída de Eclipse a la función de enmarcar en el debug view, que reinicia la depuración anteriormente en el marco de pila (pero no revierte los datos globales/estáticas) y Omniscient debugger, que es un poco cruda y no tanto evolucionando - hay algunas herramientas basadas en Eclipse que podrían ser utilizados para "volver" en el tiempo (pista):

JIVE extiende el depurador Eclipse Java con la capacidad de registrar los estados del programa. La perspectiva JIVE proporciona algunos diagramas UML útiles que se actualizan mientras el programa se está ejecutando. Estos diagramas proporcionan una visión general del estado de la aplicación (diagrama de objetos) y de la traza de pila (diagrama de secuencia). Puede consultar la traza memorizada y avanzar y retroceder en el tiempo y ver los diagramas correspondientes.

El buceador solo graba llamadas a métodos y realmente no graba estados del programa como JIVE. Cada evento de llamada de método se almacena para su posterior recuperación y análisis. Extiende las configuraciones Java Run y ​​Debug principalmente para especificar filtros. El rastreo se puede pausar/reanudar/filtrar en tiempo de ejecución. Una vez registrada, la perspectiva del buceador puede mostrarla en un diagrama de secuencia interactivo.

JIVE y Diver son proyectos de código abierto emitidos por investigaciones académicas. A partir de noviembre de 2012 ambos proyectos están activos.

Chronon es un producto comercial, pero tienen licencias gratuitas para estudiantes y proyectos de código abierto.De lo que se afirma en su sitio web es probablemente la grabadora más completa, ya que es capaz de reproducir el historial grabado, dar un paso adelante y atrás, lo que permite, como dicen, la depuración de viaje en el tiempo. Además, Eclipse no es necesario para la grabación.

Todos estos complementos son bastante codiciosos en recursos por lo que es mejor tener una buena máquina de especificación y usar su función de filtro. Un requisito definitivo para ejecutarlos con éxito es extend the heap space in eclipse.ini.

En mi caso, he intentado usar JIVE y Diver para depurar un programa de análisis XML, pero siempre terminé congelando el eclipse debido a la falta de recursos. Diver podría ser tricky to run on linux 64bit, funciona en Ubuntu 32bit y posiblemente en otras distribuciones de 32 bits usando these tips. Diver funciona en Windows, mejor aún en una Windows 64bit + 64bit JVM; de lo contrario, estará limitado a maximum heap space of 1.3-1.6Gb on 32bit windows. JIVE funciona muy bien en mi Linux de 64 bits, y parece funcionar bien en otras plataformas.

+0

Diver ha sido suspendido – fxm

5

Soy parcial, pero Chronon hace exactamente lo que estás buscando.

Drop to Frame no está dando un paso atrás, ya que si el método ha cambiado algo en el montón, no se revertirá.

+1

¿Chronon le permite hacer eso en tiempo real? Tengo entendido que primero necesita registrar una sesión usando Chronon y luego puede posiblemente retroceda en esa sesión. ¿No es eso tan bueno como reiniciar la aplicación? O tal vez me falta algo ... – Raam

+2

sí, no necesita registrar su aplicación primero y luego puede depurarla en cualquier momento después de la grabación.Es diferente de reiniciar la aplicación ya que no necesita seguir todos los pasos para reproducir el error. Todo lo que haces es grabar el error una vez y luego puedes mirarlo en cualquier momento que quieras depurar usando solo la grabación. No necesita ninguna parte del entorno original para reproducir la grabación. – pdeva

10

, Eclipse CDT tiene soporte para la función del depurador histórico.

abierto depuración de configuración ->depurador ->habilitar la depuración inversa en el arranque.

de lo que puede presionar shift+F5 o shift+F6 para el paso atrás como F5 o F6 para el paso hacia adelante.

+1

¿Existe esta opción en todas las versiones de Eclipse? Estoy agotado si puedo encontrarlo en cualquier lugar. –

+1

Su función GDB http://sourceware.org/gdb/wiki/ReverseDebug compatible con Eclipse con esta solicitud https://bugs.eclipse.org/bugs/show_bug.cgi?id=258284. Bueno, supongo que la respuesta es sí desde 2009. – Sergei

+0

Es accesible en CDT. – Sergei

1

La pregunta no especifica un idioma Eclipse, y muchas de las respuestas asumen Java.

Si usa C++ y GCC con el depurador GDB, Eclipse tiene Run->Move to Line que hace el trabajo y funciones como Visual Studio Set Next Statement. En este caso, Eclipse está utilizando la capacidad que está en GDB.

Si utilizo Java, no conozco la forma de hacerlo con Eclipse o Netbeans, aunque otras respuestas han sugerido complementos. Eclipse tiene el comando "drop to frame" que funciona para Java en mi versión (Juno SR1). Si modifico y guardo código dentro de una función en modo de depuración, la línea de ejecución se mueve automáticamente a la parte superior de la función actual y puedo continuar desde allí. No es lo mismo que especificar la línea, pero es algo.

Cuestiones relacionadas