On 2019-12-04 20:59, Andres Freund wrote:
On 2019-12-04 20:45:25 +0100, Peter Eisentraut wrote:
In the previous discussions on backtrace support, some people asked for
backtraces in more situations.  Here is a patch that prints backtraces on
SIGABRT, SIGBUS, and SIGSEGV signals.  SIGABRT includes assertions and
elog(PANIC).

Hm. Can we really do that somewhat reliably like this?

I've seen reputable programs that do all kinds of things in SIGSEGV handlers, including running user-defined programs, without taking any special precautions. So it seems possible in general.

I'd suspect that
there'll be some oddities e.g. for stack overflows if done this way. To
my knowledge it's not a good idea to intercept SIGBUS/SIGSEGV without
using a separate signal stack (cf. sigaltstack) - but using a separate
stack could also make it harder to determine a correct backtrace?

Didn't know about that, but seems useful.  I'll look into it.

It'd be bad if the addition of backtraces for SEGV/BUS suddenly made it
harder to attach a debugger and getting useful results. Even
disregarding the previous concerns, we'll get less useful debugger
interactions due to this, e.g. for things like null pointer derefs,
right?

The backtrace and level of detail jumping around between frames I get in lldb looks the same as without this. But it might depend.

--
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


Reply via email to