Apakah ada cara untuk membuat Throwable.printStackTrace(PrintStream s)
jejak tumpukan penuh, sehingga saya bisa melihat melampaui baris terakhir "... 40 more"
?
Apakah ada cara untuk membuat Throwable.printStackTrace(PrintStream s)
jejak tumpukan penuh, sehingga saya bisa melihat melampaui baris terakhir "... 40 more"
?
Anda tidak perlu; informasi tersebut ada di tempat lain di pelacakan tumpukan. Dari dokumen printStackTrace()
:
Perhatikan keberadaan garis yang berisi karakter
"..."
. Baris ini menunjukkan bahwa sisa pelacakan tumpukan untuk pengecualian ini cocok dengan jumlah bingkai yang ditunjukkan dari bagian bawah jejak tumpukan pengecualian yang disebabkan oleh pengecualian ini (pengecualian "melampirkan").Singkatan ini dapat sangat mengurangi panjang keluaran dalam kasus umum di mana pengecualian terbungkus dilemparkan dari metode yang sama saat "pengecualian kausatif" ditangkap.
Dengan kata lain, "... x more"
hanya muncul di pengecualian berantai, dan hanya jika x
baris terakhir dari jejak tumpukan sudah ada sebagai bagian dari jejak tumpukan pengecualian berantai lainnya.
Misalkan suatu metode menangkap pengecualian Foo, membungkusnya dalam Bilah pengecualian, dan melempar Bilah. Kemudian jejak tumpukan Foo akan dipersingkat. Jika Anda karena alasan tertentu menginginkan jejak lengkap, yang perlu Anda lakukan adalah mengambil baris terakhir sebelum ...
jejak tumpukan di Foo dan mencarinya di jejak tumpukan Bar; segala sesuatu di bawah garis itu persis seperti yang akan dicetak dalam jejak tumpukan Foo.
...
adalah bingkai pertama yang berbeda. Namun setidaknya akan berada di kelas yang sama yang membantu menemukannya.Tebakan cepat pada metode untuk Anda.
sumber
Mari kita ambil jejak tumpukan dari dokumentasi Throwable.printStackTrace () :
Penyebabnya ditampilkan dari yang paling bertingkat di bagian bawah ("akar masalah"), ke jejak tumpukan yang dicetak.
Dalam hal ini akar penyebabnya adalah
LowLevelException
, yang disebabkanMidLevelException
, yang disebabkanHighLevelException
.Untuk mendapatkan pelacakan tumpukan lengkap Anda harus melihat bingkai dari pengecualian yang melampirkan (dan pengecualian yang melampirkan):
Jadi jika kami ingin mendapatkan jejak tumpukan lengkap
LowLevelException
kami akan melakukan hal berikut:MidLevelException
)MidLevelException
(HighLevelException
)Jejak tumpukan lengkap Anda akan terlihat seperti ini:
Catatan samping:
Mungkin ada kasus di mana tidak ada bingkai yang terdaftar, misalnya:
Hal ini dapat terjadi jika penyebabnya itu dibuat di baris yang sama:
new HighLevelException(new MidLevelException())
. Jangan bingung dengan ini, pendekatan yang dijelaskan di atas masih berfungsi, hanya tidak ada bingkai untuk digunakan dari pengecualian, lanjutkan dengan yang melampirkan.Dalam beberapa kasus, Anda dapat menghemat penghitungan dengan melihat bingkai pertama yang tidak dihilangkan (baris di atas
... X more
). Jika Anda mengetahui metode mana yang memanggil metode di baris itu, Anda dapat langsung mencari pemanggil dalam bingkai pengecualian yang melampirkan:sumber