2009-10-30 7 views
48

¿Puedo mover el puntero de instrucción directamente a una línea de mi elección (dentro del método actual) mientras se depura un programa Java en Eclipse (Galileo)?Mover el puntero de instrucción mientras se depura Java en Eclipse

Es fácil arrastrar el puntero de instrucción a la línea deseada dentro de un método en Visual Studio, pero no veo una manera de hacerlo en Eclipse (y no encuentro nada al respecto en los documentos o en google)

+0

AFAIK no puede dar marcha atrás al código ya ejecutado. – Abdul

+0

En mi instancia específica, quiero saltar sobre una declaración ** if **, pero generalmente me parece muy útil en Visual Studio para poder mover arbitrariamente la IP dentro de un método. Cuando busqué en Google, encontré este blog (http://blogs.zdnet.com/Burnette/?p=52) que afirmaba que Eclipse es del siglo XXI, mientras que VS 2005 (!) Es del siglo XX, y resalta que incluso las versiones anteriores de VS permiten IP para ser movido –

+1

Suena como algo muy malo de hacer. Por que lo necesitarias? Y en VS, ¿puedes hacer esto con C# o solo con C++? –

Respuesta

14

Esto no es posible.

Si simplemente desea ejecutar algún código en el lugar actual, puede usar la vista Expressions e ingresar su código como una expresión. Los métodos llamados por la evaluación de expresiones se ejecutarán en el contexto actual de depuración.

+0

El único 'tipo de' lo que está buscando es el filtrado por pasos http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/views/debug /ref-usestepfilters.htm – amischiefr

+0

Parece que hay suficiente acuerdo (basado en las votaciones ascendentes) que esto no es posible. Gracias por la info. –

+7

Es un poco triste que tuviéramos la tecnología para hacer esto en los depuradores a principios de los 80, pero ahora no podemos hacerlo ... –

-2

Sitúe el cursor en la línea que desee y presione ctrl-R ("Ejecutar en línea") o haga clic con el botón derecho y seleccione "Ejecutar en línea" en el menú contextual.

+6

Eso no mueve el puntero de instrucción a la línea que elija, establece un punto de interrupción temporal en esa línea y simplemente comienza a ejecutarse nuevamente.Ejecutará instrucciones intermedias, y nunca alcanzará la línea que seleccioné a menos que el flujo de programa natural se dirigiera allí de todos modos. En otras palabras, no me permite establecer el puntero de instrucción dentro de una rama que de otro modo no se alcanzaría. –

0

me gusta la respuesta de ankon mejor, pero otra opción (que sólo funcionará para su caso específico - si eso) es parar en un punto de interrupción en su if y modificar la variable (s) evaluado en condicional tal que devuelve falso (desde el punto de vista "variables", haga clic derecho en una variable y haga clic en "Cambiar valor ...")

+0

Gracias por la sugerencia. En general, eso sería una solución alternativa. En este caso, la instrucción ** if ** evalúa el resultado de una llamada a función, por lo que tendría que intervenir y modificar el valor de retorno. –

28

Esto es posible ...

http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.user/tips/jdt_tips.html

gota a marco - Al recorrer tu código, ocasionalmente podrías paso demasiado lejos, o paso sobre una línea en la que querías intervenir. En lugar de reiniciar la sesión de depuración, puede utilizar la acción de marco Drop to para volver rápidamente al principio de un método. Seleccione el marco de la pila correspondiente al método de Java que desea reiniciar, y seleccione Caída a marco desde la barra de herramientas de la vista de depuración o el menú contextual del marco de la pila . El puntero de instrucción actual se restablecerá a la primera instrucción ejecutable en el método. Esto también funciona para los cuadros que no están en la parte superior de la pila .

Tenga en cuenta que Drop to frame solo está disponible cuando se depura con una máquina virtual más alta 1.4 o , o la VM J9. Hay algunas situaciones en las que una JVM puede ser incapaz de mostrar los cuadros deseados de la pila. Por ejemplo, es generalmente imposible caer al marco inferior de la pila o al cualquier marco debajo de un método nativo.

+1

Como dijo Eric J. en otro comentario, esta funcionalidad le permite volver al comienzo de un método y volver a ejecutarlo, pero no le permite mover el puntero de instrucción a una línea determinada a menos que la ejecución pase desde allí. – user1187008

+2

pero, para mí, sigue siendo mucho mejor que nada ... –

+1

En Eclipse Luna y esto todavía no se puede hacer, excepto en Drop to Frame, que parcialmente lo hace. (Esto es seguro de ahorro de tiempo en otros VS para C/C++/C#). He aquí un informe de error corregido en Eclipse que parece haber puesto en práctica en el 2008, por lo que probablemente se trata de una limitación de la JVM: https://bugs.eclipse.org/bugs/show_bug.cgi?id=118147 Pl publica actualizaciones en este hilo siempre que esto esté disponible. –

0

pensé que esto era totalmente posible en versiones anteriores de eclipse, pensé que tenía el recuerdo de hacerlo, pero creo que sólo implantado que la memoria cuando trabajaba en Visual Studio. Por lo que estoy leyendo, podría llegar al jvm y no eclipsarse a sí mismo, hay páginas donde se sugiere que el jvm no puede manejar eso.

En mi opinión, Eclipse es muchas veces mejor que VS, trabajé extensamente en ambos y desde que descubrí Eclipse siempre sufría cuando tenía que trabajar en VS. Pero no tener esta característica definitivamente está doliendo en este momento jeje.

0

Puede saltar directamente a cualquier otra llamada a método dentro del método actualmente depurado. Seleccione alguna llamada al método debajo de su puntero de instrucción actual y use "Step into selection" en el menú contextual.

0

desafortunadamente no es posible dar un paso adelante con el puntero de instrucción (contador de programa), entonces lo que necesita hacer es introducir sus propias variables de "depuración" que puede probar - digamos que quiere dar un paso alrededor de un ciclo toma demasiado tiempo, luego agrega una variable y prueba su valor incrementado y luego encapsula el bucle en un si con esa variable. Sé que esto es feo, pero se las trae - o usted podría desarrollar en C++ :-)

-1

clic Justo a la derecha de la línea deseada y seleccione Ejecutar a line.That de que ...

+0

No en 2009 cuando hice esta pregunta :-) Ya no estoy usando Eclipse, así que no puedo confirmar si funciona o no. –

+6

Si hace clic en "Ejecutar en línea", no moverá su puntero de instrucción. Va a reanudar la ejecución y romper cuando se golpea la línea seleccionada. Esto no te permitirá retroceder o saltar a bloques con condiciones. –

+0

Esto parece funcionar solo bien cuando se ejecuta hacia adelante, no cuando se intenta correr hacia atrás. –

0

Al mover el puntero al igual que en Visual Studio no es posible, sin embargo soluciones son:

Yendo hacia atrás hasta el principio del método actualmente ejecutada: Seleccione el método de la pila de llamadas de depuración, haga clic derecho -> "gota a fotograma" et voila Vuelve al comienzo del método.

Ahora, para llegar a la línea deseada, seleccione la línea haciendo clic en ella y presione ctrl + r o haga clic con el botón derecho en la línea y seleccione "Ejecutar en línea".

Estas técnicas son de gran ayuda y reducen los esfuerzos de depuración masivamente, ¡disfrútalo!

Cuestiones relacionadas