将用户指定的信息添加到Java堆栈跟踪

时间:2011-08-29 07:41:05

标签: java debugging stack-trace

有没有办法向java堆栈跟踪添加其他信息?

我正在为脚本语言开发一个解释器,并希望在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) 
...

这会使调试变得容易很多,遗憾的是谷歌找不到任何可以实现此目的的东西。

我能想到的唯一方法是用方法动态生成很多类,其名称包含我需要的信息,并且只是调用stacktrace中的下一个方法 - 但这似乎浪费了(permgen)内存和cpu循环给我。

1 个答案:

答案 0 :(得分:1)

如果您将脚本翻译为字节码,则可以使用SourceFileLineNumber属性提供调试详细信息。

我不知道在运行时将信息注入调用堆栈的机制。