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

Chr*_*phK 6 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) 
...
Run Code Online (Sandbox Code Playgroud)

或这个:

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) 
...
Run Code Online (Sandbox Code Playgroud)

这将使调试变得更容易,不幸的是谷歌找不到任何东西来实现这一目标.

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

McD*_*ell 1

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

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