2008年9月8日星期一

PostgreSql源码学习(2)

1 将PG源码编译成附加有调试信息的二进制文件(仅用于linux/unix)

进入解压所得的源码文件夹,运行./configure.然后修改GLOBALmakefile中的CC=gcc选项为:CC=gcc-g,这样在编译的时候gcc就会加入调试信息,然后sudo make install,再按照install文档所说的方法,一步一步安装PG。

2 调试initdb,pg_ctl等程序

由于initdb和pg_ctl等程序并不是后台或者前台一直运行的进程,因此可以使用gdb /usr/local/pgsql/bin/initdb来跟踪调试。

3 调试postgres,psql等程序
由于postgres,psql是后台或者前台的运行程序,因此不可以使用gdb /usr/local/pgsql/bin/postgres 来直接调试,而需要把gdb附加于这几个程序之上来跟踪调试。做法如下:
首先,运行ps -aef | grep postgres
这时会列出很多包含postgres的进程,选择postgres -D 数据所在的目录的那个进程,记录下pid
然后,运行gdb /usr/local/pgsql/bin/postgres pid,这样就可以跟踪调试运行中的postgres程序。跟踪psql的方法与此类似,只是需要事先启动一个psql。

具体的要跟踪哪段代码可以在eclipse里的源代码里寻找,找到相应的代码后设置断点跟踪。(我不太喜欢用vim和emacs来浏览源码,毕竟eclipse提供了很多方便的功能。)当然在ECLIPSE里也可以调试跟踪PG源码。

这次先写到这里,下次准备介绍后台进程。

没有评论: