Traza de invocaciones en Java

A veces me he encontrado en la situación de que no sé quien invoca una función determinada en algún código que estoy modificando. Sé que se ejecuta pero no quien lo hace. Como problema añadido, los niveles de traza en los logs no me dan más información, y no puedo ponerme mensajitos por pantalla porque no puedo modificar las clases intermedias.

Para ayudarme con este problema he encontrado este bloque de código:

for(StackTraceElement ste : Thread.currentThread().getStackTrace()) {

     System.out.println(ste.getClassName() + "."
           + ste.getMethodName() + "()");

}

 Lo que hace es, en un punto determinado del código, mostrarme la pila de invocaciones que se han ido realizando hasta llegar a ejecutar mi código mostrando, para cada una de las invocaciones, el nombre de la clase en cuestión y el método que realiza la llamada.  Así que como es muy útil lo dejo aquí apuntado para no perderlo.

Otro día más, y mejor!    🙂