2015-07-28 12 views
9

Ho una semplice classe java, e ho impostato un punto di interruzione nel metodo main e passo facendo clic su "step into" (netbeans ide).java debugging non mostra correttamente la riga corrente

atteso:

linea verde va alla linea 4 e 5 fino ciclo termina

Cosa succede:

Rimane alla linea 4.

Posso vedere nella console che il valore di I viene stampato.
Se viene stampato, significa che dovrebbe andare alla riga 5 che è System.out.print(i+" > ");.

Perché rimane sulla linea 4 fino al termine del loop?

Ecco l'anteprima:

enter image description here

This is the code i'm debugging:

2 | public class NewClass2 { 
3 |  public static void main(String[] args) { 
4 |   for (int i = 0; i < 10; i++) { 
5 |    System.out.print(i+" > "); 
6 |   } 
7 |   System.out.println("end of the loop"); 
8 |  } 
9 | } 
+0

Aggiungere un punto di interruzione alla riga 5? Una nota a parte, come fai a fare una gif come questa? Sembra davvero buono .. – Gosu

+0

@Gosu ma penso che dovrebbe andare linea per linea. Non è vero? non penso sia questo problema dipendente da netbean. –

+0

Non ho eseguito il debug di materiale per un po 'ora, ma penso che si fermi solo alle linee con punti di interruzione .. quindi se vuoi che il debug sia "sospeso" su entrambe le linee 4 e 5, hai bisogno di 2 punti di interruzione? – Gosu

risposta

6

ho visto un comportamento simile a questo prima durante l'utilizzo di IntelliJ. Credo che ciò che sta accadendo sia che la chiamata a System.out.println() venga effettivamente ottimizzata durante il processo di compilazione. Di conseguenza, la chiamata a System.out non esiste effettivamente dopo aver completato la creazione del codice. E quando si esegue il debug, il debugger non può ottenere un hook in questo codice perché non è realmente lì nel modulo che si vede sullo schermo.

A proposito, dovresti ottenere un badge per pubblicare una GIF animata molto bella nel tuo OP. Penso che questa sia la prima volta che ho visto questo, e ha funzionato molto bene nella tua domanda.

Se si vuole "ingannare" l'IDE in essere in grado di "vedere" la chiamata System.out, è possibile provare a utilizzare il seguente codice:

public static void main(String[] args) { 
    for (int i = 0; i < 10; i++) { 
     String stuff = ""; 
     System.out.print(i + " > " + stuff); 
     stuff += "more stuff"; 
    } 
    System.out.println("end of the loop"); 
} 

Aggiungi il tuo punto di interruzione proprio sulla linea con il System.out e la vostra NetBeans IDE potrebbe essere in grado di vederlo. Ho provato qualcosa di simile a questo con IntelliJ con vari gradi di successo.

+0

è interessante. Questo NetBeans è specifico? e come posso vedere correttamente quale linea si sta eseguendo? quindi se questo sta accadendo a causa dell'ottimizzazione, questo non dovrebbe essere specifico di una rete, ma qualcuno ha commentato che funziona in eclissi. Quindi che l'eclissi non si ottimizza ?? oppure –

+1

immagina solo di voler trovare un problema in un frammento di codice. quindi, per trovare correttamente cosa sta succedendo, dovrei cambiare i codici per ingannare l'ide. Questo fa male. –

+0

In genere il problema che si sta cercando di trovare _non ha a che fare con una chiamata 'System.out', quindi il fatto che il debugger salti questa chiamata non è di solito un grosso problema. Avete bisogno di entrare nella vostra chiamata a 'System.out'? In caso contrario, mi dimenticherei di questo, perché per la maggior parte del tuo codice normale non vedrai questo comportamento. –

0

Ho provato con Netbeans 8.0.2 e l'ultima versione di sviluppo. sta funzionando come previsto.

Problemi correlati