有没有一种方法可以将其他信息添加到java stacktrace?

我正在为脚本语言开发解释器,并希望在java stacktrace中看到相应的脚本代码行。

输出可能看起来像这样:

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)
...

或这个:
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)
...

这将使调试变得容易得多,不幸的是google无法找到任何实现此目的的方法。

我能想到的唯一方法是用方法动态生成许多类,这些方法的名称包含我需要的信息,并且仅在stacktrace中调用下一个方法-但这似乎浪费了(permgen)内存和cpu周期对我来说。

最佳答案

如果将脚本转换为字节码,则可以使用 SourceFile LineNumber 属性提供调试详细信息。

我不知道一种在运行时将信息注入(inject)到调用堆栈中的机制。

关于java - 将用户指定的信息添加到Java堆栈跟踪中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7227405/

10-16 09:13