2009-12-25 12 views
20

Acabo de empezar a usar Eclipse, así que no me moleste;). Pero cuando se trata de depurar un test JUnit consigo un diálogo que indica la fuente no se encuentra cuando llegue a esta línea en el código en mi método de prueba:Depuración de Eclipse "fuente no encontrada"

Assert.assertEquals(1, contents.size()); 

Yo sé que probablemente debería ir a probar y descargue la fuente desde algún lugar, pero realmente no quiero porque no tengo interés en ingresar al código JUnit. Tengo el jarro de tiempo de ejecución de JUnit entonces ¿Por qué Eclipse espera que tenga todas las herramientas de código fuente referenciadas para depurar mi propio código (parece algo tonto)?

Mi pregunta principal es sin embargo, ¿cómo puedo decirle a Eclipse que se salte este diálogo cuando la fuente no está disponible y me permite continuar depurando mi propio código?

[Editar]

He aislado la causa de esto. Parece que Eclipse parece pensar que necesita la fuente cuando el código JUnit interno arroja una excepción. En general, ¿hay alguna forma de decirle que no es así y simplemente hacer que arroje un diálogo de error de algún tipo?

+0

Creo que deberías usar 'step over' cuando navegues en métodos junit, de lo contrario Eclipse no tendría manera de advertirte que no hay fuente. En este caso, puede continuar 'ingrese' a contents.size(), pero luego antes de ingresar realmente Assert.assertEquals, presione 'step over' en su lugar. – bryantsai

+0

Eso es precisamente lo que estaba haciendo -usando step-over (f6) y aún apareció este código fuente cuando el código JUnit arrojó una excepción. – James

+0

hmm, no puedo observar su situación con mi entorno Eclipse. ¿Qué versión usas? Además, ¿utiliza la biblioteca interna junit de Eclipse o proporciona un archivo externo junit.jar externo? – bryantsai

Respuesta

20

Tuve este problema muy molesto durante mucho tiempo pero finalmente pude resolverlo. En mi caso, se lanzaba una excepción de puntero nulo en algún lugar de la función Transformer.IsRuntimeCode (ProtectionDomain) de Java.

Realmente no necesitaba saber sobre esto ya que la excepción estaba siendo capturada y manejada, pero eclipse detendría la depuración cada vez que esto ocurría y me dijo que la fuente no estaba disponible. Como resultado, constantemente tuve que seguir presionando el botón para continuar con la ejecución del código.

Con el fin de evitar que esto suceda, I:

  1. hacer clic encima de la ventana de "puntos de ruptura" en la parte inferior de la depuración pantalla
  2. derecho hace clic en "NullPointerException"
  3. sin control "Atrapados "

Esto evitó que el depurador pausara el flujo del programa durante una NullPointerException capturada.

alt text http://www.SharpDetail.com/p/so_breakpoint.gif

+0

No funcionó para mí. –

1

Calcular contents.size() en una línea separada en su lugar o establecer un punto de interrupción en el método.

También tenga en cuenta que la vista junit en Eclipse le permite navegar en el seguimiento de la pila.

10

La pila de depuración mostrará una línea de código fuente JUnit al lanzar una excepción.
Pero no debería preocuparse por eso, si no tiene el código fuente de JUnit.

Si retrocede una línea en la pila de llamadas, debería ver la línea (de su código fuente) que ha causado la excepción JUnit.
Eso debería ser suficiente para depurar su código.


Para asociar la fuente con JUnit, podría añadir la junit.jar en los Librairies de su proyecto, y asocia el junit-x.y.z-src.jar a la junit-x.y.z.jar, like so:

http://web.archive.org/web/20130227201940/http://img241.i_mageshack.us/img241/1412/eclipsejunitsrc.png

que va a generar en el .classpath de su proyecto de una línea como:

<classpathentry kind="lib" path="junit-x.y.z.jar" sourcepath="junit-x.y.z-src.jar"> 

Nota: en realidad, existiría la ruta completa de los archivos junit[...].jar en esta línea classpathentry. Pero también puede usar Linked resources para evitar ese valor fijo (la ruta completa) en su archivo .classpath.

+0

Gracias, eso es útil, pero no resuelve el problema con Eclipse, y por qué se siente que necesita solicitar la fuente. Pude reproducir este mismo comportamiento con Hibernate, lanzó una excepción interna y nuevamente Eclipse está pidiendo la fuente. Siento que me falta algo realmente simple en mi configuración IDE. – James

+0

+1 por su esfuerzo. Pero, ¿qué pasa con la próxima biblioteca que uso? supongamos que no siempre tengo la fuente, ¿entonces qué? Parece que el IDE debería tener una disposición para no intentar solicitarlo si no está allí. – James

+0

@James: Veo su punto y no creo que haya una opción de eclipse para hacerlo * no * pidiendo fuentes. Pero nuevamente, a menudo necesita enfocarse solo en su código y no en las bibliotecas que no tiene las fuentes. O tiene esas fuentes y puede asociarlas con suficiente facilidad con dichas bibliotecas. – VonC

2

que tenía un problema similar. Lo arreglé haciendo clic derecho en la carpeta del proyecto en el explorador de paquetes y seleccionando actualizar. La fuente del código no estaba sincronizada con el depurador y esto lo corrigió. El mensaje Transformer.IsRuntimeCode (ProtectionDomain) Source not found ya no aparece.

0

Tuve un problema similar con otro tarro, incluso cuando señalé la fuente lo pediría de nuevo. Pude resolverlo compilando el jar con debug="on" en ANT.

1

Utilice el filtro de pasos para evitar pasar por los paquetes ... junit .... Haga clic derecho en el seguimiento de la pila y elija Filter Package. Es posible que deba activar el filtrado primero con Use Step Filters. ~~~