RFR(S): 8191049: Add alternate version of pns() that is callable from within hotspot source (original) (raw)

Thomas Stüfe thomas.stuefe at gmail.com
Fri Nov 10 21:27:37 UTC 2017


Hi Chris,

Thank you. Yes, a comment may make sense, and/or restricting this function to not product. Otherwise the change is fine and useful, I’ll use it probably before long.

Thanks, Thomas

On Fri 10. Nov 2017 at 21:55, Chris Plummer <chris.plummer at oracle.com> wrote:

Hi Thomas,

There's certainly no intent to leave in place any calls someone might add to pns2(). It's meant as a temporary debugging aide only. So if it were to fail for any reason, IMO that's no different than adding any other sort of temporary debugging code that could possibly crash. You fix your mistake and resume your debugging. If you want I can add comments that include such a warning. thanks, Chris

On 11/10/17 12:11 AM, Thomas Stüfe wrote: Hi Chris, looks fine as a debugging aid. But it occurred to me that it may be a bit dangerous to call this from non-errorhandler settings. I recall seeing quite a few secondary crashes in VMError::printnativestack() in hs-err files over time. Especially for native non-java threads. Usually this did not matter that much because these crashes are handled by secondary error handling when printing the hs-err file. But if we call it outside of error handling, we are on our own. So. IMHO, to use this functions as a debugging aid is fine, if one can accept a slight risk of crashing the VM. If this is not acceptable, may we need some more tests for this function? Kind Regards, Thomas On Thu, Nov 9, 2017 at 9:29 PM, Chris Plummer <chris.plummer at oracle.com> wrote: Hi, Please review the following: https://bugs.openjdk.java.net/browse/JDK-8191049 diff --git a/src/hotspot/share/utilities/debug.cpp b/src/hotspot/share/utilities/debug.cpp --- a/src/hotspot/share/utilities/debug.cpp +++ b/src/hotspot/share/utilities/debug.cpp @@ -631,6 +631,24 @@ VMError::printnativestack(tty, fr, t, buf, sizeof(buf)); } +// +// This version of pns() will not work when called from the debugger, but is +// useful when called from within hotspot code. The advantages over pns() +// are not having to pass in any arguments, and it will work on Windows/x64. +// +extern "C" void pns2() { // print native stack + Command c("pns2"); + static char buf[OBUFLEN]; + if (os::platformprintnativestack(tty, NULL, buf, sizeof(buf))) { + // We have printed the native stack in platform-specific code, + // so nothing else to do in this case. + } else { + Thread* t = Thread::currentornull(); + frame fr = os::currentframe(); + VMError::printnativestack(tty, fr, t, buf, sizeof(buf)); + } +} + #endif // !PRODUCT There is also a pre-existing thread with some discussion:

http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2017-November/025134.html thanks, Chris



More information about the hotspot-dev mailing list