RFR: 8264593: debug.cpp utilities should be available in product builds.

Kevin Walls kevinw at openjdk.java.net
Mon Apr 26 21:12:36 UTC 2021


On Mon, 26 Apr 2021 15:37:55 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> This is a pull request to move the ifndef PRODUCT in src/hotspot/share/utilities/debug.cpp, and add JNIEXPORT for symbol visibility on Windows.
>> 
>> With these changes, we can use gdb on a live Linux process of a product build JVM, and call debug.cpp utilities.
>> e.g. "call universe()", or "call hsfind(0xADDRESS)".
>> 
>> (I found that making calls in the JLI_Launch thread (gdb's thread 1) will crash, but switching first to a JavaThread works.)
>> 
>> In Visual Studio use the Immediate window, just type the function name.  Verified that without the changes, the symbols can't be seen/called.
>> 
>> Printing happens on the LIVE jvm's tty (not the gdb session).
>> 
>> 
>> WizardMode is a develop flag, can't be changed in a product build, so avoid changing that in the debug() utility.
>> 
>> 
>> pa() is left ifndef PRODUCT, as the class AllocatedObj is ifndef PRODUCT in src/hotspot/share/memory/allocation.hpp
>> 
>> 
>> pns(...) uses frame fr(sp, fp, pc); but we have an ifndef PRODUCT on frame constructor:  frame(void* sp, void* fp, void* pc);
>> Leave pns and pns2 ifndef PRODUCT.
>> 
>> 
>> File size changes:
>> Linux: libjvm.so becomes 8904 bytes larger.
>> Windows: jvm.dll becomes 6656 bytes larger.
>
> src/hotspot/share/utilities/debug.cpp line 495:
> 
>> 493: // AllocatedObj in allocation.hpp is not defined for PRODUCT
>> 494: extern "C" JNIEXPORT void pa(intptr_t p)   { ((AllocatedObj*) p)->print(); }
>> 495: #endif
> 
> I don't really think 'pa' is interesting enough to keep.

Thanks Coleen - I haven't used pa either.  Will update without it...

-------------

PR: https://git.openjdk.java.net/jdk/pull/3307


More information about the hotspot-dev mailing list