¿Hay alguna forma de agregar información adicional a la pila stack de Java?Agregue información especificada por el usuario a los rastreos de la pila Java
Estoy desarrollando un intérprete para un lenguaje de script y me gustaría ver las líneas correspondientes de código de script en la pila de Java.
La salida podría ser algo como esto:
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76) called in script.scr:155
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105) called in script.scr:130
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
o esto:
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76)
--- called in script.scr:155 ---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105)
--- called in script.scr:130---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
Esto haría que la depuración mucho más fácil, por desgracia, Google no pudo encontrar nada para lograrlo.
La única forma en que podía pensar era generar dinámicamente un montón de clases con métodos, cuyo nombre contiene la información que necesito y que simplemente llama al siguiente método en la pila, pero parece una pérdida de (permgen) memoria y cpu ciclos para mí.
Interesante pregunta. El compilador de Java coloca símbolos de depuración con nombres de archivos y números de línea en el bytecode. Supongo que si te equivocaste con el bytecode, podrías ajustarlo para que se ajuste mejor a tus necesidades. ¿Los compiladores JSP están haciendo algo así? – Thilo
@Thilo - yes - Las JSP se compilan en bytecode (a veces usando un formulario intermedio de Java); En general, puede encontrar las clases compiladas dando vueltas alrededor de los directorios "en funcionamiento" de su servidor. – McDowell
el problema es que no puedo simplemente meterme con el bytecode de mis métodos, porque se llaman desde varios scripts, por lo que no puedo agregarle una información específica. Sin embargo, podría crear dinámicamente algunas clases que contengan la información necesaria en los nombres de sus métodos o similar, pero me preocupan las implicaciones de rendimiento. – ChristophK