Existe uma maneira de Throwable.printStackTrace(PrintStream s)
imprimir o rastreamento de pilha completo, para que eu possa ver além da linha final de "... 40 more"
?
Existe uma maneira de Throwable.printStackTrace(PrintStream s)
imprimir o rastreamento de pilha completo, para que eu possa ver além da linha final de "... 40 more"
?
Você não precisa; essa informação está presente em outro lugar no rastreamento da pilha. Dos documentos de printStackTrace()
:
Observe a presença de linhas contendo os caracteres
"..."
. Essas linhas indicam que o restante do rastreamento de pilha para esta exceção corresponde ao número indicado de quadros da parte inferior do rastreamento de pilha da exceção que foi causada por esta exceção (a exceção "delimitadora").Essa abreviação pode reduzir muito o comprimento da saída no caso comum em que uma exceção encapsulada é lançada a partir do mesmo método em que a "exceção causativa" é capturada.
Em outras palavras, o "... x more"
aparece apenas em uma exceção encadeada e apenas quando as últimas x
linhas do rastreamento de pilha já estão presentes como parte do rastreamento de pilha de outra exceção encadeada.
Suponha que um método capture a exceção Foo, envolva-a na exceção Bar e lance Bar. Em seguida, o rastreamento de pilha de Foo será reduzido. Se você, por algum motivo, quiser o rastreamento completo, tudo o que você precisa fazer é pegar a última linha antes do ...
rastreamento de pilha de Foo e procurá-la no rastreamento de pilha da Barra; tudo abaixo dessa linha é exatamente o que seria impresso no rastreamento de pilha de Foo.
...
é o primeiro quadro que difere. No entanto, será pelo menos na mesma classe que ajuda a encontrá-lo.Adivinhação rápida de um método para você.
fonte
Vamos pegar o rastreamento de pilha da documentação de Throwable.printStackTrace () :
As causas são exibidas a partir da mais aninhada na parte inferior (a "causa raiz"), até aquela à qual o rastreamento de pilha impresso pertence.
Neste caso, a causa raiz é o
LowLevelException
que causouMidLevelException
, o que causouHighLevelException
.Para obter o rastreamento de pilha completo, você deve olhar os frames da exceção delimitadora (e suas exceções delimitadoras):
Portanto, se quiséssemos obter o rastreamento de pilha completo de
LowLevelException
, faríamos o seguinte:MidLevelException
)MidLevelException
(HighLevelException
)Seu rastreamento de pilha completo terá a seguinte aparência:
Notas laterais:
Pode haver casos em que nenhum quadro é listado, por exemplo:
Isso pode acontecer quando a causa que criou na mesma linha:
new HighLevelException(new MidLevelException())
. Não se confunda com isso, a abordagem descrita acima ainda funciona, simplesmente não há frames para usar a partir da exceção, continue com o que está incluído.Em alguns casos, você pode evitar a contagem olhando para o primeiro quadro que não foi omitido (a linha acima
... X more
). Se você souber quais métodos chamam o método nessa linha, você pode pesquisar diretamente os chamadores nos frames da exceção envolvente:fonte