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