Java 在自定义线程下更改Throwable.printStackTrace()的行为?
目前我正在为Vanilla Minecraft服务器制作一个mod,我无法修改底层代码。现在,我正试图改变打印的堆栈跟踪,当我意外地遇到一个错误时,重新模糊的版本(附加到直接从Mojang官方网站下载的server.jar文件),使其“去模糊”,就像Minecraft Forge所做的一样。(我试着从《锻造之源》中找到我需要的东西,但我想我没有足够的经验来阅读它。)Java 在自定义线程下更改Throwable.printStackTrace()的行为?,java,exception-handling,stack-trace,minecraft,Java,Exception Handling,Stack Trace,Minecraft,目前我正在为Vanilla Minecraft服务器制作一个mod,我无法修改底层代码。现在,我正试图改变打印的堆栈跟踪,当我意外地遇到一个错误时,重新模糊的版本(附加到直接从Mojang官方网站下载的server.jar文件),使其“去模糊”,就像Minecraft Forge所做的一样。(我试着从《锻造之源》中找到我需要的东西,但我想我没有足够的经验来阅读它。) 有人知道如何通过Java代码、反射,甚至通过自定义本机代码,使用尽可能少的外部库修改getStackTrace()方法的行为吗?谢
有人知道如何通过Java代码、反射,甚至通过自定义本机代码,使用尽可能少的外部库修改
getStackTrace()
方法的行为吗?谢谢 我建议调用方法getStackTrace
,而不是printStackTrace
,并生成自己的堆栈跟踪打印输出。。。我没有冒犯你。我想我说得不够清楚。上面的示例代码是不可修改的,这意味着我无法将printStackTrace()
更改为getStackTrace()
。谢谢你的回答,但很抱歉拒绝了我没有使用它的经验,但我觉得它可能是您所需要的,所以如果您不知道它的存在,请查看字节码工程库(Apache Commons BCEL),我想我会尝试一下。谢谢你,艾布拉!:>
package underlying.cannot.be.modified
public class Main
{
public static void main(String[] args)
{
...
new SomeClass().someMethod();
...
}
}
package underlying.cannot.be.modified
public class SomeClass
{
...
public void someMethod()
{
...
try
{
...
}
catch(Exception e)
{
/*
* An example of an exception thrown in the underlying codes
* which cannot be modified.
*/
e.printStackTrace();
}
...
}
...
}
underlying.cannot.be.modified.Main -> underlying.cannot.be.modified.Main
main(String[]) -> main
underlying.cannot.be.modified.SomeClass -> A
someMethod() -> a
at A.a (?:?)
at underlying.cannot.be.modified.Main (?:?)
at underlying.cannot.be.modified.SomeClass.someMethod (?:?)
at underlying.cannot.be.modified.Main (?:?)