how to debug into InitPostgres() and InitCatalogCache()?

Started by 土卜皿over 11 years ago3 messages
#1土卜皿
pengcz.nwpu@gmail.com

hi, all
I already can debug general postgres using "ddd" and "select
pg_backend_pid();" , now, I want to study the details of the system
catalog cache and system cache management, so I need to debug the function
InitPostgres() and InitCatalogCache(), and I tried the following steps:

[refer: How to debug postgresql during initdb ]
<http://www.phacai.com/how-to-debug-postgresql-during-initdb&gt;

(1) in first terminal:

ddd initdb

and set a breakpoint on the next executable line after “PG_CMD_OPEN” in
function bootstrap_template1() ,

Then within gdb, use “r $myfolder/mydb”,

and found the cursor stop at the breakpoint

(2) in the second terminal:

ps aux | grep "bin\/postgres"

after get the posgtres server pid, start a new ddd without args, and within
gdb, using "attach postgres.pid"

and set a breakpoint as InitCatalogCache()

(3) back to the first ddd window, hit the "cont" button. I hope it can stop
at the second ddd's breakpoint, but nothing happened?

I must make mistake in some step, or my understanding is fully wrong,
please give me some advice, thanks a lot!

Dillon

#2土卜皿
pengcz.nwpu@gmail.com
In reply to: 土卜皿 (#1)
Re: how to debug into InitPostgres() and InitCatalogCache()?

2014-08-05 22:08 GMT+08:00 土卜皿 <pengcz.nwpu@gmail.com>:

hi, all
I already can debug general postgres using "ddd" and "select
pg_backend_pid();" , now, I want to study the details of the system
catalog cache and system cache management, so I need to debug the function
InitPostgres() and InitCatalogCache(), and I tried the following steps:

[refer: How to debug postgresql during initdb ]
<http://www.phacai.com/how-to-debug-postgresql-during-initdb&gt;

(1) in first terminal:

ddd initdb

and set a breakpoint on the next executable line after “PG_CMD_OPEN” in
function bootstrap_template1() ,

Then within gdb, use “r $myfolder/mydb”,

and found the cursor stop at the breakpoint

(2) in the second terminal:

ps aux | grep "bin\/postgres"

after get the posgtres server pid, start a new ddd without args, and
within gdb, using "attach postgres.pid"

and set a breakpoint as InitCatalogCache()

(3) back to the first ddd window, hit the "cont" button. I hope it can
stop at the second ddd's breakpoint, but nothing happened?

I must make mistake in some step, or my understanding is fully wrong,
please give me some advice, thanks a lot

I am sorry that this is a simple question. I found that the above steps
make the posgres reach boot_yyparse() of BootstrapModeMain(void), which
means postgres has already finished the initialization including
InitCatalogCache(), and it was waiting query command or other user command .

For debug initialization including system catalog cache, I add some code
like:

bool forDebug = true;

while (forDebug){
forDebug = true;
}

in the InitPosgres()'s starting position.

Show quoted text
#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: 土卜皿 (#2)
Re: how to debug into InitPostgres() and InitCatalogCache()?

土卜皿 wrote:

2014-08-05 22:08 GMT+08:00 土卜皿 <pengcz.nwpu@gmail.com>:

hi, all
I already can debug general postgres using "ddd" and "select
pg_backend_pid();" , now, I want to study the details of the system
catalog cache and system cache management, so I need to debug the function
InitPostgres() and InitCatalogCache(), and I tried the following steps:

For debug initialization including system catalog cache, I add some code
like:

bool forDebug = true;

while (forDebug){
forDebug = true;
}

in the InitPosgres()'s starting position.

There's also the -W switch, which makes it wait precisely to let you
attach a debugger.

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

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers