Pergunta

Qual é a maneira mais fácil de imprimir um stacktrace a partir de uma impressão de depuração?Freqüentemente, durante o teste, você gostaria de saber a pilha de chamadas que levou à situação que provocou uma mensagem de depuração.

Foi útil?

Outras dicas

Se você estiver usando log4j

Exception e = new Exception();
log.error("error here", e);

imprimirá o stacktrace em seu log.

Se quiser salvar o rastreamento de pilha em uma String, você pode fazer isso;

String exception = "";
for (StackTraceElement element : e.getStackTrace())
   exception += element.toString() + "\n";

Onde e é, obviamente, uma exceção.

Além disso, parece muito estranho gerar automaticamente uma exceção própria apenas para encontrar um rastreamento de pilha para uma depuração.Obtenha o Eclipse e use seu modo de depuração, é realmente incrível.

Apenas criar uma exceção arbitrária resolve para mim:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();

Assim como o @jjnguy disse, se você não tiver uma exceção, também pode chamar Thread.getStackTrace().

Você deve capturar a exceção em um bloco try-catch.

e.getStackTrace();

Isso retorna StackTraceElement[] que você pode interpretar.

Também:

e.printStackTrace()

irá ... imprimir o stacktrace.

Para simplesmente imprimir o rastreamento de pilha atual em stderr, você pode chamar:

Thread.dumpStack();

que por si só chama:

new Exception("Stack trace").printStackTrace();

Para saída para saída padrão em vez de stderr, passe System.out para printStackTrace():

new Exception("Stack trace").printStackTrace(System.out);

Só porque eu mesmo precisava:

Como inspirado pela resposta Como encontro o chamador de um método usando stacktrace ou reflexão? , você pode recuperar a pilha de chamadas usando

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

Em seguida, você processa e imprime/registra tudo o que lhe interessa.Mais trabalho do que usar Thread.dumpStack(), mas mais flexível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top