¿Qué es un seguimiento de pila y cómo puedo usarlo para depurar los errores de mi aplicación?

A veces, cuando ejecuto mi aplicación, aparece un error similar al siguiente:

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

La gente se ha referido a esto como un "rastro de pila".¿Qué es un seguimiento de pila? ¿Qué puede decirme sobre el error que está ocurriendo en mi programa?

Acerca de esta pregunta: con bastante frecuencia veo que surge una pregunta en la que un programador novato está "recibiendo un error", y simplemente pegan su seguimiento de pila y algún bloque de código aleatorio sin comprender qué es el seguimiento de pila o cómo pueden usarlo. Esta pregunta pretende ser una referencia para programadores novatos que puedan necesitar ayuda para comprender el valor de un seguimiento de pila.

Respuestas a la pregunta(7)

Su respuesta a la pregunta