2010-08-10 14 views
18

Mi sento come se mi mancasse qualcosa di molto semplice qui. Ho impostato Eclipse per interrompere tutte le eccezioni. Quindi, diciamo che si rompe su AssertationFailedException. La finestra di debug mostrerà quel filo sospeso e ha i seguenti dati:Punto di interruzione ad eccezione in Eclipse: come esaminare l'oggetto Exception?

Thread [Thread-1] (Suspended (exception AssertionFailedException)) 
    ContactManager.addContact(String) line: 93 
    ContactManager$ContactDataCallback.dispatch(String, Element, ClientConnector) line: 118 
    PacketHandler.handle(FractusPacket) line: 173 
    ServerConnection.syncProcess(FractusMessage) line: 122 
    ServerConnection.run() line: 248  
    Thread.run() line: 636

Tuttavia, il testo che sto cercando, come ad esempio: "Getter chiamato regno al di fuori di org.eclipse.core.databinding osservabile .observable.set.WritableSet @ 4b7361e2 ", non è disponibile fino a quando non passo all'eccezione (quindi lo spingo fino allo stack) dove emette il tipo di eccezione, il testo (che è la parte che voglio) e la traccia dello stack.

Come posso esaminare "AssertationFailedException" (o qualsiasi altra eccezione) per ottenere il messaggio con cui è stata costruita l'eccezione? Certo che sono nella prospettiva Debug.

risposta

27

c'è un'opzione nelle preferenze di Eclipse che consente di ispezionare del eccezione generata:

check Java -> Debug -> Open popup when suspended on exception

Con questa opzione ci sarà un popup che consentirà l'ispezione dell'eccezione.

Strano che questa opzione non sia selezionata per impostazione predefinita in quanto è molto utile!

+1

Ottimo! Probabilmente è necessario riavviare Eclipse come nel mio caso. Anche Ctrl + Shift + I non funziona come promesso in questa finestra. – alehro

+0

probabilmente non è selezionato per impostazione predefinita in quanto a volte è possibile ottenere un * lotto * di eccezioni. Comunque +1 a questa risposta, vorrei +5 se potessi. Mi ci è voluto un sacco di tempo per trovarlo. – eis

1

Per quanto posso dire, non sembra possibile, il che è un po 'triste. Per quello che vale, altri IDE che ho usato (IntelliJ IDEA, Oracle JDeveloper) sembrano fare un lavoro molto migliore in questo.

Ad esempio, IntelliJ IDEA ha un'opzione sui punti di interruzione delle eccezioni per registrare un'espressione sulla console quando viene colpito un punto di interruzione di eccezione. In questa espressione, "questo" è l'eccezione generata, così appena è possibile accedere "questo", e si ottiene qualcosa di simile:

Exception 'java.lang.IllegalStateException' occurred in thread 'main' at Silly.doThing(Silly.java:18) 
java.lang.IllegalStateException: dead jim 

Sembra che sostenere questo sarebbe un bel miglioramento al JDT ... non riuscivo a trovare qualcosa che sembrava legato nel loro database di bug: https://bugs.eclipse.org/bugs/buglist.cgi?quicksearch=exception+breakpoint

+0

Non posso credere che questa funzione non esista! Ho pensato che fosse così; grazie per aver controllato il database di bug/miglioramenti. – Hut8

+1

Un debugger che non ti dice quale eccezione hai colpito non sembra affatto un debugger. – speedplane

0

È possibile visualizzare il Tipo di eccezione nella prospettiva di debug nella scheda Punti di interruzione. Ho allegato uno screenshot come riferimento. Lì ho avuto NullPointerException, che è stato mostrato nella scheda punti di interruzione. enter image description here

+2

OP non sta cercando il tipo di eccezione ma il suo messaggio – eis

1

Nella vista di debug, fare clic sul thread che produce l'eccezione.

Here is the image

Problemi correlati