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

Gerald Thornbrugh gerald.thornbrugh at oracle.com
Tue Nov 14 20:57:09 UTC 2017


Hi Chris,

Your changes look good to me.

Jerry

> On Nov 14, 2017, at 1:44 PM, Chris Plummer <chris.plummer at oracle.com> wrote:
> 
> [Resending. Didn't seem to get posted first time.]
> 
> Hi Thomas,
> 
> Thanks for the review.
> 
> Can I get one more reviewer please?
> 
> thanks,
> 
> Chris
> 
> On 11/10/17 11:35 PM, Thomas Stüfe wrote:
>> Oh, you are right, I should have seen this. Knowing this, forget my worries about stability. Sorry for the noise :)
>> 
>> ..Thomas
>> 
>> On Fri, Nov 10, 2017 at 11:47 PM, Chris Plummer <chris.plummer at oracle.com <mailto:chris.plummer at oracle.com>> wrote:
>> 
>>    It's already restricted to non-product builds, but I'll add a
>>    comment also.
>> 
>>    thanks,
>> 
>>    Chris
>> 
>> 
>>    On 11/10/17 1:27 PM, Thomas Stüfe wrote:
>>>    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 <mailto: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::print_native_stack() 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 <mailto:chris.plummer at oracle.com>>
>>>>        wrote:
>>>> 
>>>>            Hi,
>>>> 
>>>>            Please review the following:
>>>> 
>>>>            https://bugs.openjdk.java.net/browse/JDK-8191049
>>>>            <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::print_native_stack(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[O_BUFLEN];
>>>>            +  if (os::platform_print_native_stack(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::current_or_null();
>>>>            +    frame fr = os::current_frame();
>>>>            + VMError::print_native_stack(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
>>>>            <http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2017-November/025134.html>
>>>> 
>>>>            thanks,
>>>> 
>>>>            Chris
>>>> 
>>>> 
>>> 
>> 
>> 
> 
> 



More information about the hotspot-dev mailing list