Embora possa parecer confuso no início, um rastreamento de pilha pode ser a chave para uma solução de problemas rápida e eficaz.
Um rastreamento de pilha (ou rastreamento) é uma saída que mostra a pilha de métodos de seu aplicativo. Você normalmente verá um em seu terminal quando seu aplicativo encontrar um erro.
Como o nome sugere, uma estrutura de dados de pilha armazena os métodos em um rastreamento de pilha. O método onde a execução do programa começa está na parte inferior da pilha, enquanto aquele que produz o rastreamento de pilha está no topo.
Um rastreamento de pilha pode ser muito útil quando você está depurando seu código.
Por que um rastreamento de pilha é importante?
Um rastreamento de pilha é uma importante ferramenta de depuração. Ele fornece informações detalhadas, como o tipo de erro, o método em que ocorreu, a linha em seu código onde ocorreu e o caminho do arquivo.
Para um programador experiente, essa informação é uma mina de ouro para entender o que exatamente deu errado e onde.
Como programador, você também pode pedir ao seu programa para criar um rastreamento de pilha sob demanda. Isso pode ser particularmente útil para manutenção de código e solução de problemas.
Como gerar um rastreamento de pilha
Dependendo da versão do seu compilador, você provavelmente obterá um traceback legível. Um traceback legível fornece um texto amigável sobre o erro, ao contrário do traceback normal. Isso é especialmente verdadeiro para novos compiladores. Portanto, a melhor maneira de aprender sobre rastreamentos de pilha é produzir um você mesmo.
Você pode produzir um rastreamento de pilha sem erros em seu código. Para isso, basta usar o dumpStack método do java.lang.Thread classe. Ele mostrará todos os métodos que foram chamados, desde aquele que chama dumpStack. O método de chamada será aquele no topo da estrutura de dados da pilha.
Aqui está um programa de exemplo que gera explicitamente um rastreamento de pilha:
class StackTraceDemo {
public static void main(String[] args) {
day();
}static void day() {
hours();
}
static void hours() {
minutes();
}
static void minutes() {
int a = 24 * 60;
System.out.println(a + " minutes in a day");
Thread.dumpStack();
}
}
Resultado:
1440 minutes in a day
java.lang.Exception: Stack trace
at java.base/java.lang.Thread.dumpStack(Thread.java:138)
at StackTraceDemo.minutes(StackTraceDemo.java:17)
at StackTraceDemo.hours(StackTraceDemo.java:11)
at StackTraceDemo.day(StackTraceDemo.java:7)
at StackTraceDemo.main(StackTraceDemo.java:3)
Nesta saída, você pode observar que o traceback mostra como o programa chamou cada método Java e em qual número de linha em seu código-fonte. O método que gerou o rastreamento de pilha é aquele mostrado no topo da pilha. O método que chamou aquele está na linha abaixo dele, e assim por diante.
Além do rastreamento de pilha
Por padrão, quando seu programa Java é executado em um erro, ele para e exibe um rastreamento de pilha. No entanto, você pode optar por lidar com esses erros normalmente em vez de mostrar mensagens que podem confundir os usuários finais.
Você pode melhorar o tratamento de erros do seu programa usando um bloco try…catch() para capturar exceções. Também é importante considerar — e entender — os vários tipos de erros que seus programas podem encontrar.