On 12/18/06, Tom Lane <[EMAIL PROTECTED]> wrote:

Gregory Stark <[EMAIL PROTECTED]> writes:
> Hm, I suppose. Though starting a second gdb is a pain. What I've done in
the
> past is introduce a usleep(30000000) in strategic points in the backend
to
> give me a chance to attach.

There is already an option to sleep early in backend startup for the
normal case.  Not sure if it works for bootstrap, autovacuum, etc,
but I could see making it do so.


You are probably referring to the command-line switch -W to posrgres, that
translates to 'PostAuthDelay' GUC variable; I think that kicks in a bit too
late! Once I was trying to debug check_root() (called by main() ), and had
to resort to my own pg_usleep() to make the process wait for
debugger-attach. We should somehow pull the sleep() code into main() as far
up as possible.

BTW, here's how I made PG sleep until I attached to it (should be done only
in the function you intend to debug):

{
 bool waitFor_Debugger = true;
 while( waitForDebugger )
   pg_usleep(1000000);
}

It will wait forever here, until you set a breakpoint on 'while' and then
set the var to false.

The suggestion of single-stepping
initdb will only work well if you have a version of gdb that can step
into a fork, which is something that's never worked for me :-(.
Otherwise the backend will free-run until it blocks waiting for input
from initdb, which means you are still stuck for debugging startup
crashes ...

                        regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly




--
[EMAIL PROTECTED]
[EMAIL PROTECTED] gmail | hotmail | yahoo }.com

Reply via email to