RFR(S): 8191049: Add alternate version of pns() that is callable from within hotspot source
Chris Plummer
chris.plummer at oracle.com
Tue Nov 14 20:54:36 UTC 2017
Thanks Jerry!
On 11/14/17 12:57 PM, Gerald Thornbrugh wrote:
> 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