RFR: 8295537: Debug tracing for resolved java.lang.invoke.CallSite [v2]
Ioi Lam
iklam at openjdk.org
Wed Oct 26 05:31:24 UTC 2022
On Tue, 25 Oct 2022 19:33:25 GMT, Mandy Chung <mchung at openjdk.org> wrote:
>> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>>
>> @JornVernee comments
>
> src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java line 312:
>
>> 310: String callerName = caller.getName();
>> 311: String[] callerInfo = new String[] {callerName};
>> 312: StackWalker.getInstance().walk(new Function<Stream<StackWalker.StackFrame>, Object>() {
>
> You can call `StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE)` to retain `Class` instance in `StackFrame` such that you can compare `Class` instance rather than class name.
The `StackWalker` API depends on Streams, which is likely to have lambdas in its implementation. To avoid the possibility of bootstrap problems, I have changed the code to use `Thread.currentThread().getStackTrace()`, which is used by `Throwable.printStackTrace()`. Since `printStackTrace()` is supposed to be useable at very early bootstrap stages, we are sure no lambdas will be used.
Unfortunately `getStackTrace()` doesn't return the `Class` object, so I have to use the class's name.
-------------
PR: https://git.openjdk.org/jdk/pull/10842
More information about the core-libs-dev
mailing list