Throwable.printStackTrace(PrintStream s)
Son satırın ötesini görebilmem için tam yığın izlemesini yazdırmanın bir yolu var mı "... 40 more"
?
Throwable.printStackTrace(PrintStream s)
Son satırın ötesini görebilmem için tam yığın izlemesini yazdırmanın bir yolu var mı "... 40 more"
?
Yanıtlar:
Yapmanıza gerek yok; bu bilgi yığın izlemede başka bir yerde bulunur. Belgelerden printStackTrace()
:
Karakterleri içeren satırların varlığına dikkat edin
"..."
. Bu satırlar, bu istisna için yığın izlemenin geri kalanının, bu istisnanın neden olduğu istisnanın yığın izlemesinin altından belirtilen çerçeve sayısıyla eşleştiğini gösterir ("çevreleyen" istisna).Bu kısaltma, "nedensel istisna" nın yakalanmasıyla aynı yöntemden sarılmış bir istisnanın atıldığı yaygın durumda çıktının uzunluğunu büyük ölçüde azaltabilir.
Başka bir deyişle, "... x more"
yalnızca zincirlenmiş bir istisnada ve yalnızca x
yığın izlemenin son satırları başka bir zincirleme istisnanın yığın izlemesinin parçası olarak zaten mevcut olduğunda görünür .
Bir yöntemin Foo istisnasını yakaladığını, onu istisna Barına sardığını ve Bar attığını varsayalım. Daha sonra Foo'nun yığın izi kısaltılacaktır. Herhangi bir nedenle tam izlemeyi istiyorsanız, yapmanız gereken tek şey ...
Foo'nun yığın izlemesinden önceki son satırı almak ve bunu Bar'ın yığın izlemesinde aramaktır; bu çizginin altındaki her şey, Foo'nun yığın izlemesinde tam olarak yazdırılan şeydir.
Yığın izini Throwable.printStackTrace () belgelerinden alalım :
HighLevelException: MidLevelException: LowLevelException
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
at Junk.c(Junk.java:23)
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
... 1 more
Caused by: LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
... 3 more
Nedenler, en alttaki en iç içe olandan ("temel neden"), yazdırılan yığın izlemenin ait olduğu nedene kadar görüntülenir.
Bu durumda temel neden, neden olan LowLevelException
, neden MidLevelException
olanıdır HighLevelException
.
Tam yığın izlemesini elde etmek için, çevreleyen istisnanın çerçevelerine (ve çevreleyen istisnalara) bakmanız gerekir:
Yani tam yığın izini elde etmek isteseydik LowLevelException
, aşağıdakileri yapardık:
MidLevelException
)
ihmal edilen çerçeveleri arayınMidLevelException
( HighLevelException
)Tam yığın izlemeniz şu şekilde görünür:
LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
// From MidLevelException stack trace
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
// From HighLevelException stack trace
at Junk.main(Junk.java:4)
Yan notlar:
Hiçbir çerçevenin listelenmediği durumlar olabilir, örneğin:
HighLevelException: MidLevelException
at Junk.main(Junk.java:4)
Caused by: MidLevelException
... 1 more
Neden aynı çizgide yarattığı durumlarda gerçekleşebilir: new HighLevelException(new MidLevelException())
. Kafanızı karıştırmayın, yukarıda açıklanan yaklaşım hala işe yarıyor, istisnadan kullanılacak hiçbir çerçeve yok, ekiyle devam edin.
Bazı durumlarda, ihmal edilmeyen ilk kareye (yukarıdaki satır ... X more
) bakarak sayımdan tasarruf edebilirsiniz . Bu satırdaki yöntemi hangi yöntemlerin çağırdığını biliyorsanız, çevreleyen istisnanın çerçevelerinde doğrudan arayanları arayabilirsiniz:
HighLevelException: MidLevelException: LowLevelException
at Junk.c(Junk.java:29)
at Junk.b(Junk.java:21)
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException
// You know Junk.d is only called by Junk.b
at Junk.d(Junk.java:35)
... 3 more
...
farklı olan ilk karedir. Ancak en azından onu bulmaya yardımcı olan aynı sınıfta olacak.