[MÚSICA] [MÚSICA] Esse é o curso de orientação a objetos com Java, eu sou Eduardo Guerra, hoje vamos falar do Stack Trace de uma exceção. O Stake Trace é negócio extremamente importante para a detecção de erros. Tá certo? Então, entender Stack Trace, o que ele é e como ele funciona, aprender a ler o Stack Trace é extremamente importante para uma das atividades cruciais no desenvolvimento de qualquer software que é o debug, né? Tirar os erros, achar onde os erros estão e eliminá-los. Então vamos lá. Toda exceção deixa rastro, certo? Que é, digamos assim, a pilha de execução até aquele ponto. Então vamos supor que você começou com o método main, chamou método, chamou outro, outro e aí deu uma exceção. A exceção, ele guarda todo esse caminho, todo esse rastro até aquele ponto aonde ela foi criada. Então, bom vamos entender direitinho aqui com exemplo, né? Mas essa informação do Stack Trace ela é extremamente útil pra você poder descobrir os erros, descobrir onde foi que ele aconteceu, muitas vezes falar assim: " é só olhar lá o método onde aquele erro aconteceu". Mas pode não ser isso, pode ser algum parâmetro que você passou para aquele método que às vezes vem de outro método seu, às vezes aquele parâmetro vem desde a interface gráfica do usuário. É extremamente importante essa informação para você saber onde o erro aconteceu e por onde aquela chamada ali passou. Às vezes, por exemplo, você tem método que ele é invocado vários lugares. Se este método dá erro, você vai querer saber de onde veio aquela chamada. Então vamos pegar aqui esse exemplo: vamos supor que eu chamo ali, eu tenho método main, ele chama método A, esse método A chama método B, esse método B retorna, ele chama método C, esse método C chama método D e pá! No método D acontece uma exceção. Todo esse caminho percorrido do main até o D é o Stack Trace. Então no Stack Trace você vai falar assim: "olha, a exceção aconteceu no D, antes disso estava no C, antes disso estava no A e antes..." o B, por exemplo, fica de fora, porque ele foi chamado e retornou. Ele vai pegar é o C que invocou o D. Então ele vai falar assim: "o D, o C, o A e o main, este é o meu Stack Track, este é o meu caminho". Tá certo? Quando a gente manda imprimir o Stack Trace, ele imprime mais ou menos isso daqui, eu vou sair pouquinho aqui da frente, Para vocês verem aí o Stack Trace completo. Então a classe que ele dá exceção, ela já ajuda bastante. Então, por exemplo aqui está FBSWLException, né? No caso é exceção do Firebird, então eu sei, opa, espera aí, eu sei que esse erro é uma classe de exceção do Firebird, então deve ter sido algum problema no banco de dados. A segunda coisa que você olha depois da classe da exceção e agora eu vou sair da frente mesmo, é o que está escrito, a mensagem de erro. Bom, deixa eu sair aqui da frente. Então no caso ele tá falando assim: "olha, isso daí é índice inválido de coluna que você está tentando acessar". Então eu já sei que eu tentei, fiz uma quarry, por exemplo, e a coluna que eu estou tentando acessar é inválida. Porquê? Por causa da mensagem de erro que a exceção está dando. Agora tem esse monte de rastro aqui, o que é que você vai fazer? Eu vou entrar só pouquinho, já saio. Olha aqui antes, que você vai ver antes dessa faixa amarela, você vai estar vendo que [INAUDÍVEL] traços dos bancos de dados. Esse aqui ó, my application e etc. Tá? Vou sair de novo aqui para vocês verem, é uma exceção da minha aplicação. Tá? É esse AccessServlet aí. E depois, tem monte aí de chamadas que são no caso aí do Tomcat, que é o webserver que eu estava utilizando. Então o que você vai fazer? Você vai lá e vai procurar as suas classes do Stack Trace. Pode ser que tenha classes que venham depois, pode ser que tenham classes que venham antes. O caso aqui, o exemplo que eu peguei, é de uma aplicação web. Então, por exemplo, quando recebe a requisição, quem recebe é TomCat, então ele vai processando isso daí até que chega na sua classe. E aí no caso, essa classe chamou o banco de dados, e aí também teve várias classes do banco de dados até acontecer esse erro. Então você saber, entender esse Stack Trace, você saber olhar, procurar suas classes é extremamente importante para você poder localizar o erro. Deixa eu sair mais pouquinho da frente só para você reparar que ele tem inclusive não só o nome da classe, mas também a linha de código. Nesse exemplo você pode ver o que aconteceu na classe AccessServlet no método do gat na linha 50. E aí uma coisa que eu falo para os alunos, né, eu vejo que o cara, principalmente quem está aprendendo programação o cara fala: " deu erro, deu pau, e agora o que é que eu faço? E aí levanta a mão". Como vocês aí casa não têm, não tem a mim para levantar a mão e eu ir aí ajudar, vocês precisam aprender a se virar. Tá certo? Então, gente, às vezes eu chego assim: " deu erro aqui, qual erro? Não sei!" Ou seja, a pessoa nem pegou para olhar a exceção que estava acontecendo, às vezes é só ler a mensagem de erro, é só olhar no Stack Trace aonde na sua classe aconteceu aquele erro, às vezes já é óbvio qual o problema que está acontecendo. Tá? Então, não se esqueça disso: acontecer erros, ter que decifrar que erro é esse, onde ele está, para arrumar o seu software, isso faz parte. Pode ver aí às vezes nos hands on mesmo acontece erro. Então faz parte você ver o erro que aconteceu e ter que interpretar isso daí. Não se desespere, não desanime, isso é normal. O que você não pode fazer é simplesmente deu erro, ponto. Não! Deu erro? Qual erro, onde deu? E nesse caso, ler o Stack Trace da exceção é extremamente importante para isso daí. Então eu espero que vocês tenham aprendido pouco mais sobre o Stack Trace, entendido o que é que é, como ele funciona e principalmente, quando imprimir erro no console ou num arquivo de log, por exemplo, você saber pegar esse Stack Trace, interpretar e entender o que está acontecendo, onde está tendo este erro e etc. Tá certo? Muito obrigado. Até à próxima aula! [MÚSICA]