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