2014-08-05 22:08 GMT+08:00 土卜皿 <pengcz.n...@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> > > (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. > > > > >