2009-02-25 12 views
20

Una situazione di debug quotidiana per gli sviluppatori Java è quella in cui viene generata un'eccezione e quindi è necessario scavare nel debugger per scoprire cosa lo ha lanciato. Solitamente si tenta di impostare alcuni punti di interruzione prima che venga generata l'eccezione e si spera di essere in grado di determinare la situazione che porta a tale eccezione.Rilevare eccezioni come espressione durante il debug di Java in Eclipse IDE

In Eclipse, un punto di interruzione può avere un'espressione definita in cui viene attivato solo quando, ad esempio, la variabile x è uguale al valore y. La mia domanda è, è possibile definire un qualche tipo di espressione globale in cui, una volta generata un'eccezione, viene catturata dal debugger, consentendo al programmatore di ispezionare immediatamente tutte le variabili? Idealmente non avresti ancora colpito il blocco catch, Eclipse catturerebbe l'eccezione che veniva sollevata e interrompeva l'esecuzione senza cambiare il contenuto dello stack.

È possibile o è limitato dalla JVM?

risposta

35

Un altro esempio: Eclipse Tip: Breakpoint on Exception

Eclipse consentono di impostare i punti di interruzione in base a dove si verifica un'eccezione.
È possibile accedere all'opzione tramite "j!"http://help.eclipse.org/juno/topic/org.eclipse.jdt.doc.user/images/org.eclipse.jdt.debug.ui/elcl16/exc_catch.png icona nella finestra di debug (ad esempio, "Breakpoint View").

Add Java exception Window

L'argomento della guida ufficiale "Add Java Exception Breakpoint" ha più su questo.

  • L'opzione Eccezione non rilevata è sospendere l'esecuzione quando un'eccezione dello stesso tipo del punto di interruzione viene generata in una posizione non rilevata.
  • L'opzione Caught Exception è sospendere l'esecuzione quando un'eccezione dello stesso tipo del punto di interruzione viene generata in una posizione rilevata.
  • non dimenticare il Exception Breakpoint Suspend on Subclass of this Exception: esecuzione
    iniziative di sospensione quando si incontrano sottoclassi il tipo di eccezione.
    Ad esempio, se un punto di interruzione di eccezione per RuntimeException è configurato per la sospensione su sottoclassi, verrà attivato anche da NullPointerException.

alt text

+1

Perché io non riuscivo a trovare la "J!" pulsante fino a quando non ho chiesto al mio officemate: è nella vista Punti di interruzione. Ovvio a posteriori, lo so, ma qualcun altro potrebbe avere lo stesso problema. –

+0

@Samir: buon punto. Ho aggiunto il riferimento esplicito a quella "Vista punto di interruzione" (e un link all'aiuto di eclissi ufficiale su questa vista) – VonC