RFR: 7439: Introduced IConstantPoolExtension for Constant Pools [v6]
Jean-Philippe Bempel
jpbempel at openjdk.java.net
Wed Dec 29 21:26:20 UTC 2021
On Fri, 26 Nov 2021 20:46:41 GMT, Jean-Philippe Bempel <jpbempel at openjdk.org> wrote:
>> Add extension methods when constants are read, referenced, resolved, constant pools fully resolved and parsing finished to be able for example:
>>
>> * track constant pool usage inside events
>> * replace or translate symbols, method names, etc... like
>> de-obfuscations of stack traces
>
> Jean-Philippe Bempel has updated the pull request incrementally with one additional commit since the last revision:
>
> remove unused import
is your stacktrace for the error similar to:
java.lang.StringIndexOutOfBoundsException: String index out of range: -11
at java.base/java.lang.String.substring(String.java:1841)
at org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrJavaClass.convertNames(StructTypes.java:331)
at org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrJavaClass.getFullName(StructTypes.java:315)
at org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrJavaClass.hashCode(StructTypes.java:341)
at java.base/java.util.Objects.hashCode(Objects.java:116)
at org.openjdk.jmc.flightrecorder.internal.parser.v1.StructTypes$JfrMethod.hashCode(StructTypes.java:625)
at org.openjdk.jmc.flightrecorder.stacktrace.graph.AggregatableFrame.hashCode(AggregatableFrame.java:90)
at java.base/java.util.HashMap.hash(HashMap.java:339)
at java.base/java.util.HashMap.get(HashMap.java:552)
?
in that case it's because you have changed the class name but not the package name associated.
Then when referencing a class or a method, package name & class name are not the same, which is not expected.
in your example to fix the issue:
private static Deobfuscator createFooDeobfuscator() {
Map<String, String> obfuscatorClassMap = new HashMap<String, String>(); // obfuscated class -> class
obfuscatorClassMap.put("se/hirt/jmc/tutorial/hotmethods/HotMethods", "de/docware/ms/foo/Foo");
Map<String, String> obfuscatorPackageMap = new HashMap<String, String>(); // obfuscated package -> package
+++ obfuscatorPackageMap.put("se/hirt/jmc/tutorial/hotmethods", "de/docware/ms/foo");
Map<String, Map<String, String>> obfuscatorClassMethodsMap = new HashMap<String, Map<String, String>>(); // (class, obfuscated method) -> method
return new Deobfuscator(obfuscatorClassMap, obfuscatorPackageMap, obfuscatorClassMethodsMap);
}
-------------
PR: https://git.openjdk.java.net/jmc/pull/333
More information about the jmc-dev
mailing list