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