Debug di Eclipse “fonte non trovata”

Ho appena iniziato ad usare Eclipse quindi non esagerare con me;). Ma quando provo a eseguire il debug di un caso di test JUnit, viene visualizzata una finestra di dialogo in cui si afferma che la sorgente non viene trovata quando arrivo a questa riga nel codice nel mio metodo di test:

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

So che probabilmente dovrei andare a provare a scaricare la fonte da qualche parte, ma davvero non voglio perché non ho alcun interesse a entrare nel codice JUnit. Ho il jar di runtime JUnit quindi Perché Eclipse si aspetta che io abbia tutto il codice sorgente degli strumenti di riferimento per eseguire il debug del mio codice (sembra un po ‘sciocco)?

La mia domanda principale è però, come posso dire ad Eclipse di saltare questa finestra di dialogo quando la fonte non è disponibile e permettermi di continuare a eseguire il debug del mio codice?

[Modificare]

Ho isolato la causa di questo. Sembra che Eclipse sembra ritenere che abbia bisogno dell’origine quando un’eccezione viene lanciata dal codice JUnit interno. In generale c’è comunque da dire che non lo fa e basta lanciare un dialogo di errore di qualche tipo, invece?

Ho avuto questo problema molto fastidioso per molto tempo, ma alla fine è stato in grado di risolverlo. Nel mio caso, un’eccezione di puntatore nullo veniva lanciata da qualche parte nella funzione Transformsr.IsRuntimeCode (ProtectionDomain ) di Java.

Non avevo davvero bisogno di saperlo perché l’eccezione veniva catturata e gestita, ma eclipse interrompeva il debug ogni volta che accadeva e mi diceva che la fonte non era disponibile. Di conseguenza, ho costantemente dovuto premere il pulsante per continuare l’esecuzione del codice.

Per evitare che ciò accada, io:

  1. Cliccato sulla finestra “Punti di interruzione” nella parte inferiore della schermata di debug
  2. Tasto destro su “NullPointerException”
  3. Unchecked “Catturato”

Ciò ha impedito al debugger di sospendere il stream del programma durante una NullPointerException rilevata.

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

Quando si lancia un’eccezione, il callstack di debug visualizza una riga di codice sorgente JUnit.
Ma non dovresti preoccuparti di questo, se non hai il codice sorgente di JUnit.

Se torni indietro di una riga nel callstack, dovresti vedere la linea (del tuo codice sorgente) che ha causato l’eccezione JUnit.
Questo dovrebbe essere sufficiente per eseguire il debug del tuo codice.


Per associare il sorgente a JUnit, è ansible aggiungere junit.jar nelle librairie del progetto e associare junit-xyz-src.jar a junit-xyzjar , in questo modo :

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

Questo genererà nel percorso .classpath del tuo progetto una linea come:

  

Nota: in realtà, ci sarebbe il percorso completo dei file junit[...].jar in questa riga classpathentry . Ma potresti anche usare le risorse collegate per evitare quel valore fisso (il percorso completo) nel tuo file .classpath .

Ho avuto un problema simile. L’ho risolto facendo clic con il pulsante destro del mouse sulla cartella del progetto in Esplora pacchetto e selezionando Aggiorna. La sorgente del codice non era sincronizzata con il debugger e questo lo ha corretto. Il messaggio Transformsr.IsRuntimeCode (ProtectionDomain) Source not found non viene più visualizzato.

Calcola content.size () su una riga separata o imposta un punto di interruzione sul metodo.

Si noti inoltre che la vista junit in Eclipse consente di navigare nella traccia dello stack.

Usa il filtro Step per evitare di attraversare i … pacchetti junit …. Fare clic con il tasto destro del mouse sulla traccia dello stack e selezionare Filtro pacchetto. Potrebbe essere necessario triggersre prima il filtro con Usa filtri passo-passo. ~~~

Ho avuto un problema simile con un altro barattolo, anche quando ho indicato la fonte lo avrebbe chiesto di nuovo. Sono stato in grado di risolverlo compilando il jar con debug="on" su ANT.