I'm getting a stackoverflow error on using $sig in a static method.
Exception in thread "main" java.lang.StackOverflowError at javassist.runtime.Desc.getClassType(Desc.java:139) at javassist.runtime.Desc.getType(Desc.java:122) at javassist.runtime.Desc.getClassType(Desc.java:150) at javassist.runtime.Desc.getType(Desc.java:122) at javassist.runtime.Desc.getParams(Desc.java:70)
Found the same question for version 3.15.0-GA here: https://developer.jboss.org/thread/176637 But it has no answer.
Here's the code I'm injecting:
method.insertBefore("System.out.println(com.example.MyClass.formatArgs($args, $sig));");
And this is the body of the function formatArgs:
public static String formatArgs(Object[] args, Class[] argTypes){ try { StringBuilder result = new StringBuilder(); result.append("Arguments:"); for (int i = 0; i < args.length; ++i) { result.append(" - type: ").append(argTypes[i]).append(", value: ").append(args[i]); } return result.toString(); } catch (Throwable e){ System.out.println("EXCEPTION in formatArgs"); e.printStackTrace(); } return ""; }
I'm using gradle 3.0, with Javassist version 3.20.0-GA. My run command is:
java -Xbootclasspath/a:javassist-3.20.0-GA.jar -javaagent:myAgent.jar -jar myApp.jar
How do I resolve this error?