Проследяване на стека (или обратно проследяване) е изход, който показва стека на метода на вашето приложение. Обикновено ще видите такъв на вашия терминал, когато приложението ви срещне грешка.
Както подсказва името, стекова структура от данни съхранява методите в стекова трасировка. Методът, при който започва изпълнението на програмата, е в долната част на стека, докато този, който произвежда проследяването на стека, е в горната част.
Проследяването на стека може да бъде много полезно, когато отстранявате грешки в кода си.
Защо проследяването на стека е важно?
Проследяването на стека е важен инструмент за отстраняване на грешки. Той ви дава подробна информация като вида на грешката, метода, по който е възникнала, реда във вашия код, където е възникнала, и пътя на файла.
За опитен програмист тази информация е златна мина за разбиране какво точно се е объркало и къде.
Като програмист можете също да поискате от вашата програма да създаде проследяване на стека при поискване. Това може да бъде особено полезно за поддръжка на код и отстраняване на проблеми.
Как да изведете проследяване на стека
В зависимост от версията на вашия компилатор най-вероятно ще получите четливо проследяване. Четимото проследяване предоставя удобен за потребителя текст за грешката, за разлика от нормалното проследяване. Това важи особено за новите компилатори. Следователно, най-добрият начин да научите за трасирането на стека е да създадете такъв сам.
Можете да създадете проследяване на стека, без да имате грешки във вашия код. За да направите това, просто използвайте dumpStack метод на java.lang. Нишка клас. Той ще покаже всички методи, които са били извикани, направо от този, който извиква dumpStack. Методът за извикване ще бъде този отгоре на стекова структура от данни.
Ето една примерна програма, която изрично генерира проследяване на стека:
класStackTraceDemo{
публиченстатиченневалиденосновен(Низ [] аргументи){
ден();
}статиченневалиденден(){
часа();
}статиченневалиденчаса(){
минути();
}
статиченневалиденминути(){
вътр а = 24 * 60;
System.out.println (a + " минути на ден");
Нишка.dumpStack();
}
}
Изход:
1440 минути на ден
java.lang.Изключение: Стекследа
на java.base/java.lang. Thread.dumpStack (Thread.java: 138)
приStackTraceDemo.минути(StackTraceDemo.java:17)
приStackTraceDemo.часа(StackTraceDemo.java:11)
приStackTraceDemo.ден(StackTraceDemo.java:7)
приStackTraceDemo.основен(StackTraceDemo.java:3)
В този резултат можете да забележите, че проследяването показва как програмата е извикала всеки Java метод и на кой номер на ред в изходния код. Методът, който генерира проследяването на стека, е този, показан в горната част на стека. Методът, който е извикал този, е на реда под него и т.н.
Отвъд Stack Trace
По подразбиране, когато вашата Java програма се сблъска с грешка, тя ще спре и ще покаже проследяване на стека. Можете обаче да изберете да се справите с тези грешки елегантно, вместо да показвате съобщения, които могат да объркат крайните потребители.
Можете да подобрите обработката на грешките на вашата програма, като използвате блок try...catch() за улавяне на изключения. Също така е важно да вземете под внимание — и да разберете — различните типове грешки, които вашите програми могат да срещнат.