Eclipse: il debugger non si ferma al punto di interruzione


96

Sto cercando di risolvere i problemi con una JUnit. Nel codice sorgente, ho impostato il punto di interruzione in due punti: 1) in una riga in cui viene inizializzato un membro statico 2) la prima riga di uno dei casi di test.

Il debugger si ferma nella riga di inizializzazione del campo statico. Ma non si ferma al caso di prova. Non importa dove ho impostato il punto di interruzione nel test case, il debugger non si ferma qui. So per certo che il test case viene eseguito in quanto posso vedere i messaggi di log che ho aggiunto apparire nel log.

Qualsiasi aiuto sarebbe molto apprezzato.

Sto usando Eclipse Galileo e il programma di avvio JUnit4.


1
Il codice è stato compilato con l'opzione -g attivata per generare le informazioni di debug nel file .class? È necessario, ovviamente.
duffymo

Sì, è compilato con l'opzione -g.
Roy

Puoi anche aggiungere informazioni su quale versione di JUnit e su JRE stai utilizzando? Credo che sia utile in questo contesto.
Vineet Reynolds,

Il JDK in uso è più importante a proposito (ci sono alcuni JDK incasinati che potrebbero causare questo). Ignora la query sulla versione di JUnit.
Vineet Reynolds,

Scusa se avrei dovuto includerlo. Aggiornamento JDK 1.6 14.
Roy

Risposte:


39

Ciò potrebbe essere correlato a uno dei bug in JDK 6 Update 14, come indicato nelle note di rilascio per JDK 6 Update 15 .

Se questo risulta effettivamente essere il problema, dovresti passare a una versione superiore del JDK (non è tuttavia una garanzia, poiché sono state rilasciate correzioni contro 6u16, 6u18 e 7b1 ). La soluzione migliore è usare -XX: + il flag UseParallelGC. Aumentando la dimensione dell'heap minima e massima, per ritardare il primo GC, portare un sollievo temporaneo.

A proposito, usa questa segnalazione di bug in Eclipse per tenere traccia di come si sono comportati gli altri.


1
Ho aggiornato a JDK 1.6 aggiornamento 16. Ora si ferma a tutti i punti di interruzione che ho impostato. Grazie mille per il vostro aiuto.
Roy

Prego. u16 sembra essere la versione in cui è stato risolto abbastanza bene, nonostante le note di rilascio di u15.
Vineet Reynolds,

Grazie @Vineet - Mi stavo tirando i capelli su questo :-)
Jim Garrison

@VineetReynolds: ho visto le tue preziose risposte relative a Jboss e Java ee 6. puoi aiutarmi a risolvere questo problema? stackoverflow.com/questions/28954323/…
tempesta cerebrale

96

La correzione potrebbe essere semplice come fare clic su Esegui / Salta tutti i punti di interruzione. Ha funzionato per me.


3
mi ci sono voluti tre giorni per capire che in qualche modo avevo cliccato su quello
Henry

1
Grazie ... deve aver cliccato sull'icona della barra degli strumenti per sbaglio in qualche modo :-P
kenyee

4
Grazie ... non ho idea di quando è stato cliccato
njfife

1
Grazie mille. Per gli altri utenti, in questa situazione, se si crea un punto di interruzione, apparirà barrato.
saurabheights

Lo stesso è accaduto a me. Non l'ho mai cliccato ... !! Versione: Mars Release (4.5.0) Build id: 20150621-1200
Beezer

52

Assicurati, in Esegui> Debug Configurations, che "Stop in main" sia selezionato, se applicabile alla tua situazione.


1
Assicurati di leggere le risposte precedenti prima di pubblicare. Il problema era la loro versione jvm .. ed è stato risolto tre anni fa. È meglio non rianimare vecchi thread a meno che la tua risposta non contribuisca a qualcosa di significativo, che non era già stato trattato nelle risposte precedenti.
Leigh

6
Grazie. @Answerer la tua risposta ha risolto il mio problema. È strano che "Stop in main" non fosse impostato.
Yu Shen

25
Sembra che la sua risposta abbia contribuito a qualcosa di significativo che non era già stato trattato nelle risposte precedenti :)
scubbo

Nota, questa è un'opzione per le applicazioni Java ma non per le applicazioni Android.
Noumenon

21

Di solito quando questo accade a me (raro ma lo fa) significa che il codice in esecuzione è diverso dal codice nell'editor. Accadrà di tanto in tanto per Eclipse che le classi costruite e il codice nell'editor non siano sincronizzati. Quando ciò accade, ottengo tutti i tipi di strani comportamenti del debugger (debug di righe vuote, salto di righe di codice, ecc.).

Riavviare Eclipse, pulire tutti i progetti e ricostruire tutto di solito chiarisce le cose. Avevo anche i plugin Maven (le versioni precedenti ... non ce l'avevo da un po 'di tempo) che avevano la tendenza a farlo anche loro.

Altrimenti potrebbe essere un bug, forse quello dichiarato da Vineet,

Spero che questo ti aiuti


Sì, quello che hai affermato accade di più negli IDE che non ricompilano automaticamente il codice. Oracle JDeveloper (per esperienza personale) e in misura minore (Netbeans) si sono rivelati carenti.
Vineet Reynolds,

1
Buon Consiglio. Non è stato detto abbastanza. A volte pensiamo troppo al problema ed è solo il sistema non sincronizzato. Come nel caso del riavvio di un computer per la risoluzione di problemi semplici.
Xonatron

Grazie, questo era il problema nel mio caso. Sembra stupido, ma un semplice clean e F5 dopo una build ha funzionato.
jfajunior

20

Potresti aver saltato accidentalmente tutti i punti di interruzione nella barra degli strumenti di Eclipse. Per risolvere questo problema, vai su Eclipse -> Esegui -> Salta tutti i punti di interruzione.


1
Arggh, c'è anche una scorciatoia per questo, molto probabilmente non ho controllato accidentalmente una voce di menu, ma è piuttosto probabile che abbia premuto Ctrl + Alt + B. Grazie comunque.
Patru

3

Progetto -> Clean sembrava funzionare per me su JRE 8


2

Affinché il debugger funzioni con il telecomando, i file java .class devono essere rispettati insieme alle informazioni di debug. Se l' opzione " -g: none " è stata passata al compilatore, il file di classe non avrà le informazioni necessarie e quindi il debugger non sarà in grado di abbinare i punti di interruzione sul codice sorgente con quella classe in remoto. Nel frattempo, se i file jar / class sono stati offuscati , anche loro non avranno alcuna informazione di debug. Secondo le tue risposte, molto probabilmente questo non è il tuo caso, ma questa informazione potrebbe essere utile per altri che affrontano lo stesso problema.


2

Nel mio caso il problema era che non avevo la vista Debug aperta nella prospettiva Debug, quindi:

1 - Assicurati di avere la prospettiva di debug aperta:

il debugger di eclipse non funziona 1

2 - Assicurati di avere la vista di debug aperta:

il debugger di eclipse non funziona 2



1

Per JDK7, run-> Debug Configurations, seleziona "Keep JUnit running after a test run when debugging".


1

Mi è successo una volta, quando avevo deselezionato "Esegui> Crea automaticamente" e mi sono dimenticato di ricontrollarlo.


1

Assicurati di dichiarare il pacco in alto. Nel mio codice groovy questo si ferma ai breakpoint:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Questo non si ferma ai breakpoint:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Dopo aver lottato molto, questo risolve il mio problema. Grazie +1
Federico Piazza

0

Per rimuovere i punti di interruzione :

  1. Esegui il debug della tua classe come test junit
  2. Quando il debugger si arresta, fai clic sulla scheda "breakpoint" accanto a "variabili" ed "espressioni"
  3. In alto a destra della scheda del punto di interruzione, fai clic sul pulsante con due "X"
  4. Interrompi il test, sostituisci il punto di interruzione ed esegui di nuovo il debugger

0

Verificare anche se i punti di interruzione su altre righe funzionano, potrebbe essere un bug nel debugger. Ho avuto un problema con il debugger di Eclipse in cui l'inserimento di un punto di interruzione su un'assegnazione booleana il cui codice era sulla riga successiva non ha funzionato, l' ho segnalato qui , ma inserendolo nella riga precedente o successiva lo ha fatto.


0

Se non funziona niente

  1. Rimuovere quella configurazione di debug locale / remota e crearne una nuova.
  2. Aggiungi l'origine nelle configurazioni di debug.

0

Un altro possibile problema è che la porta del debugger potrebbe essere bloccata dal firewall. Ad esempio, stavo usando mule anypoint studio (v 5.4.3). La porta predefinita del debugger è 6666. Quando un flusso viene eseguito, non si ferma al punto di interruzione. quando ho cambiato la porta con un'altra (ad esempio 8099), ha funzionato bene.


0

Vai a Right click->Debug Configuratione controlla se sono state create troppe istanze di debug. Il mio problema è stato risolto quando ho eliminato più istanze di debug dalla configurazione e ho avviato il debug di recente.


0

Se sei su Eclipse,

Fare clic con il tasto destro sulla cartella del progetto in "Package Explorer".

Vai all'origine -> Pulisci e scegli il tuo progetto.

Questo ripulirà qualsiasi pasticcio e il tuo punto di interruzione dovrebbe funzionare ora.



0

Nel mio caso avevo più progetti nella stessa area di lavoro. Il file java che stavo cercando di eseguire il debug era presente in più di un progetto con lo stesso pacchetto.

Non avevo bisogno dell'altro progetto, quindi ho semplicemente chiuso i progetti non correlati (o rimuovi il file dal progetto non correlato).


0

Un ulteriore commento sulla risposta di Vineet Reynolds.

Ho scoperto che ho dovuto impostare -XX:+UseParallelGCineclipse.ini

Ho impostato gli argomenti della macchina virtuale (vm) come segue

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

che ha risolto il problema.


-2

Questo è ciò che funziona per me:

Ho dovuto inserire il mio indirizzo del server locale nella configurazione del server PHP in questo modo:

inserisci qui la descrizione dell'immagine

Nota : quell'indirizzo, è quello che configuro nel mio Apache .conf file .

Nota : l'unico punto di interruzione che funzionava era "Interruzione alla prima riga", dopodiché i punti di interruzione non funzionavano.

Nota : controlla le tue proprietà xdebug nel tuo file php.ini e rimuovi quelle che ritieni non siano necessarie.


1
Non riesco a vedere come questo risponde alla domanda (su JUnit e il debug di Java)
Newtopian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.