Обсуждение: elog a stack trace

Поиск
Список
Период
Сортировка

elog a stack trace

От
Jeff Janes
Дата:

Does anyone have any hints on how to get a stack trace programmatically, rather than trying to run ps to get the pid and then attach gdb to a ephemeral process and hoping the situation has not been changed while you are doing that?  I'd like to set 

log_error_verbosity = stack

or 

elog_stack(,...)

But those don't exist.

Cheers,

Jeff

Re: elog a stack trace

От
Andres Freund
Дата:
Hi,

On 2014-05-02 08:16:39 -0700, Jeff Janes wrote:
> Does anyone have any hints on how to get a stack trace programmatically,
> rather than trying to run ps to get the pid and then attach gdb to a
> ephemeral process and hoping the situation has not been changed while you
> are doing that?  I'd like to set
> 
> log_error_verbosity = stack
> 
> or
> 
> elog_stack(,...)

There's backtrace() on several platforms. The stacktraces are less
detailed than what gdb gives you tho.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



Re: elog a stack trace

От
"MauMau"
Дата:
From: "Jeff Janes" <jeff.janes@gmail.com>
> Does anyone have any hints on how to get a stack trace programmatically,
> rather than trying to run ps to get the pid and then attach gdb to a
> ephemeral process and hoping the situation has not been changed while you
> are doing that?  I'd like to set
>
> log_error_verbosity = stack
>
> or
>
> elog_stack(,...)
>
> But those don't exist.

On Windows, you can use Stackwalk() or Stackwalk64() Win32 API.  Several 
years ago, for some software, I implemented a feature that outputs the stack 
trace of a crashing process to its server log file.

It would be very nice if PostgreSQL outputs the stack trace of a crashing 
postgres process in the server log.  That eliminates the need for users in 
many cases to send the huge core files to the support staff or to use the 
debugger to get the stack trace.  I've recently heard that MySQL has this 
feature.

Regards
MauMau




Re: elog a stack trace

От
Alvaro Herrera
Дата:
MauMau wrote:

> On Windows, you can use Stackwalk() or Stackwalk64() Win32 API.
> Several years ago, for some software, I implemented a feature that
> outputs the stack trace of a crashing process to its server log
> file.
> 
> It would be very nice if PostgreSQL outputs the stack trace of a
> crashing postgres process in the server log.  That eliminates the
> need for users in many cases to send the huge core files to the
> support staff or to use the debugger to get the stack trace.  I've
> recently heard that MySQL has this feature.

+1, assuming it can be made to work reliably and does not cause a larger
reliability problem.  I see the GNU extension to get backtraces, for
instance, tries to malloc stuff in order to get a human-readable trace,
which might not be all that great.

-- 
Álvaro Herrera                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services