La migliore strategia per trovare la causa principale quando l'eccezione viene inghiottita da terze parti

3

Sono certo che siamo tutti incappati in uno scenario in cui un'API di terza parte si lamenta di una traccia di stack incompleta. In sostanza, la gestione degli errori nell'API di terze parti fa qualcosa del genere,

catch (WhateverException e) {
   throw new ConfusingException("Something terrible happened, BUT I won't tell you what!");
}

Ora qui quando viene lanciata la ConfusingException non passa WhateverException come causa nel secondo param, e quindi quando qualcuno che usa questa API ottiene l'eccezione non otterrebbe l'intera traccia. Purtroppo, è ancora comune vedere le persone scrivere questo codice e peggiora quando non si ha il controllo del codice.

Qual è la strategia che seguiresti di fronte alla situazione: come trovi il messaggio di eccezione e la linea su cui è stata sollevata WhateverException?

    
posta Yazad Khambata 06.05.2015 - 22:09
fonte

2 risposte

8

La tua migliore possibilità sarebbe quella di eseguire l'applicazione con un debugger e impostare un breakpoint su quella linea (o il costruttore di ConfusingException).

È possibile impostare un punto di interruzione anche nelle applicazioni di terze parti quando la sorgente potrebbe non essere disponibile. Come in questo caso nel metodo o ConfusingException come suggerito qui .

    
risposta data 06.05.2015 - 23:01
fonte
-1

Puoi creare una funzione util come questa:

public static Throwable getRootException(Throwable exception){
 Throwable rootException=exception;
 while(rootException.getCause()!=null){
  rootException = rootException.getCause();
 }
 return rootException;
}

Fonte: Come ottenere l'eccezione root di ogni eccezione

    
risposta data 12.02.2018 - 21:01
fonte

Leggi altre domande sui tag