asserts in jdk coding (outside hotspot)
David Holmes
david.holmes at oracle.com
Fri Jun 2 00:52:25 UTC 2017
Hi Thomas,
On 1/06/2017 10:26 PM, Thomas Stüfe wrote:
> Hi David,
>
> On Thu, Jun 1, 2017 at 2:09 PM, David Holmes <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>> wrote:
>
> Hi Thomas,
>
> On 1/06/2017 7:20 PM, Thomas Stüfe wrote:
>
> Hi all,
>
> so, we have the hotspot asserts with all the niceties of our error
> reporting. But these asserts are only accessible from within
> hotspot coding.
>
> In the JDK, in a number of places, I see that we use the
> standard posix
> assert()(
> http://pubs.opengroup.org/onlinepubs/009695399/functions/assert.html
> <http://pubs.opengroup.org/onlinepubs/009695399/functions/assert.html>).
>
> This means that when we trigger the assert, we will only get a brief
> message on stderr and a core, but no hs_err file.
>
> It also means that -XX:+CreateCoredumpOnCrash is ignored, so it
> is not
> possible to switch off those core dumps.
>
> This is unfortunate and also easy to fix. We do not even have to
> call into
> the hotspot to get hotspot asserts. We could just force a NULL
> pointer
> access or send ourselves a SIGILL or something. Anything which
> triggers the
> hotspot signal handling would be fine.
>
> What do you think?
>
>
> Sending ourselves a fatal signal doesn't indicate what assertion
> failed. The error handler won't know it was an assert, just a SEGV
> or SIGILL
>
> ??
>
> David
>
>
> Sure. But in many cases this still would be preferable to just a core.
> We'd get a hs-err file - admittedly with a Segv instead of an assert
> message - but we have a callstack and could deduce the error from there.
I suppose we could do all the assert related printfs before sending the
signal. The assertion info wouldn't be in the hs_err log, but at least
it would be somewhere.
Anyway I'll leave this for core-libs folk to mull over.
Cheers,
David
> I am not saying that this is an ideal solution. Of course, a really good
> solution may invoke the real hotspot assert or one might come up with a
> way to transfer assert information (message, file, line etc) to the
> hotspot error handler. E.g. store the assert message in a globally
> visible char array one could resolve via dlsym to avoid having to add
> link dependencies.
>
>
> ..Thomas
>
>
> Kind Regards, Thomas
>
>
More information about the core-libs-dev
mailing list