RFR: 8292699: Improve printing of classes in native debugger [v11]
Ioi Lam
iklam at openjdk.org
Sun Oct 23 05:33:15 UTC 2022
On Fri, 21 Oct 2022 19:01:30 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
>> Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:
>>
>> @coleenp comments
>
> src/hotspot/share/interpreter/bytecodeTracer.cpp line 171:
>
>> 169: void BytecodeTracer::trace_interpreter(const methodHandle& method, address bcp, uintptr_t tos, uintptr_t tos2, outputStream* st) {
>> 170: if (TraceBytecodes && BytecodeCounter::counter_value() >= TraceBytecodesAt) {
>> 171: ttyLocker ttyl; // 5065316: keep the following output coherent
>
> We should file a a RFE to make this a leaf mutex rather than ttyLocker (which does get broken to allow safepoints!) with no_safepoint_check assuming that the printing doesn't safepoint. Good to remove the no-longer accurate comment.
The comment also says:
// Using the ttyLocker prevents the system from coming to
// a safepoint within this code, which is sensitive to Method*
// movement.
So are we trying to "prevent Method movement"? Does this even make sense after we switched to Permgen?
> src/hotspot/share/utilities/debug.cpp line 664:
>
>> 662: }
>> 663:
>> 664: extern "C" JNIEXPORT void printclass(intptr_t k, int flags) {
>
> It's weird that the function to print the method is findmethod, and the one to print the class is printclass. I see that findmethod is consistent with the 'find' functions above. Maybe this should be findclass() too.
I had two groups of printing functions with the following intention:
- findclass/findmethod will search for class/methods by their names. Call these when you don't have an InstanceKlass* or Method*
- printclass/printmethod should be used when you already have an InstanceKlass* or Method*
However, I realized that the second group of methods should really be something like InstanceKlass::print_xxx() and Method::print_xxx(), so you can do something like this in gdb
call ik->print_all_methods_with_bytecodes();
I have removed the second group of functions from this PR (commit [6675901](https://github.com/openjdk/jdk/pull/9957/commits/6675901125018853bad316a62702a8f7c62f331b)). I may add them in a follow-up PR if necessary.
-------------
PR: https://git.openjdk.org/jdk/pull/9957
More information about the hotspot-dev
mailing list