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

Vladimir Ivanov vlivanov at openjdk.java.net
Mon Apr 26 17:27:11 UTC 2021


On Thu, 1 Apr 2021 14:05:42 GMT, Kevin Walls <kevinw 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.

Looks good. It's a very valuable improvement in debuggability of product binaries. 

I'm surprised that all the diagnostic code debug commands rely on is already available in product binaries.

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

Marked as reviewed by vlivanov (Reviewer).

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


More information about the hotspot-dev mailing list