Ce linie într-un bloc lung de încercare Java aruncă o excepție?

Există o modalitate de a afla ce linie într-un bloc de încercare aruncă o excepție?

Lucrez pe Java în Eclipse, care arată

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException();
}

Am lovit o excepție în blocul de încercare (care este apoi prins). Cum îmi dau seama de unde sunt aruncate?

Probleme

  • Urmărirea stivei arată numai linia din blocul de captură pentru opțiunea OtherException
  • Eliminarea blocului try/catch nu este simplă, deoarece există multe excepții declarate ca aruncate care trebuie să fie prinse pentru ca codul să fie compilat.

Se simte că ar trebui să existe un mod simplu de a face acest lucru.

Notă: nu am scris acest cod ;-)

0
Depanarea cu punctele de întrerupere face minuni. :-)
adăugat autor Buhake Sindi, sursa
Răspuns: Am stabilit un breakpoint în blocul de captură și am examinat Excepția "e". Stackul de apeluri mi-a spus unde a fost aruncat.
adăugat autor Tim Bellis, sursa

6 răspunsuri

Aveți posibilitatea să utilizați aruncați noua opțiune OtherException (e); . Ca documentație explică, acest constructor construiește o nouă excepție cu cauza specificată .

0
adăugat

You can also try printing out the error message to the console: System.out.println(e.getMessage());

Punctele de blocare sunt însă foarte utile, deoarece puteți urmări codul și puteți vedea exact când ajunge la blocul de captură.

0
adăugat
Mai bine să vă înregistrați decât să imprimați o urmă de stivă
adăugat autor Qwerky, sursa

În acest caz special, va trebui să vă asigurați că este bifată opțiunea "Suspend pe excepții prinse".

Odată ce Eclipse intră în programul de depanare, veți avea la dispoziție o mulțime de instrumente. Veți vedea stiva de apeluri, veți putea examina variabilele etc.

0
adăugat

Utilizați parametrul cause pentru Exceptions ( vedeți aici ):

try {

  //Lots of code. Seriously. Lots.

} catch (Exception e){
  throw new OtherException(e);//Trick is here
}

În felul acesta veți obține și excepția cause în stacktrace.

0
adăugat

Treceți excepția e în constructorul OtherException atunci când o aruncați. Acesta vă va da următoarea stivă completă cu linia exactă care aruncă excepția:

catch (Exception e) {
    throw new OtherException(e);
}

Dacă OtherException nu are un constructor care să ia un cod Exception sau Throwable

catch (Exception e) {
    OtherException o = new OtherException();
    o.initCause(e);
    throw o;
}
0
adăugat

Imprimați doar stacktrace sau rulați pe modul de depanare

e.printStackTrace()
0
adăugat
Mai bine să vă înregistrați decât să imprimați o urmă de stivă.
adăugat autor Qwerky, sursa
Văd, dar uneori loggin este inutil dacă doriți să depanați numai eroarea.
adăugat autor Peerapat A, sursa