Linux下搭建PostgreSQL调试环境

前言

本文主要讲emacs调试pgsql的步骤,emacs相关配置可以参考http://blog.163.com/madahah@126。

关于使用eclipse和vimgdb调试的相关文章请参考如下链接:http://wiki.postgresql.org/wiki/PgkernalDebugEnviormentSetup。

本文假设大家都熟悉Linux基本操作,所以有些步骤写的简单一些。

添加postgres用户

adduser postgres

passwd postgres

注意:为了方便调试,建议大家直接用postgres登录,这样可以避免不必要的麻烦,比如目录的权限,启动X窗口程序之类。

安装C开发环境

对于PGSQL而言,如果不开启某些特性(比如zlib,openssl等),只要安装gcc、make、gdb 、readline、ncurses、bsion、flex。 虽然Linux版本很多,但是每个版本都有相应的工具来安装常用软件,如yum,apt-get等,我的是CentOS,使用yum:

 yum install gcc make gdb readline-devel git bison flex

如果你需要开启某些特性,请根据configure的提示安装相应的库以及其头文件,一般来说rpm包会是*-devel,deb包是*-dev。

获得代码

可以直接在http://www.postgresql.org/ftp/source/ 获得几乎所有版本的代码,根据自己需要下载相应版本。下载后解压到某个目录下;

也可以使用git: git clone git://git.postgresql.org/git/postgresql.git 。

编译安装PGSQL

编译安装基本上就是3步:./configure;make;make install

configure是基础,所以主要说一下:

./configure --help会列出一些帮助,比如编译后pgsql安装的位置,是否启用某些特性等。

./configure --prefix=/home/postgres/pgsql --enable-debug CFLAGS="-O0"

--prefix 指定安装根目录为/home/postgres/pgsql,这样会在make install 后,在~/pgsql下创建bin,lib等目录并安装在其下面,我们可以把~/pgsql/bin加入到PATH;

--enable-debug 允许在可执行文件中加入调试信息,是我们可以调试PGSQL;

CFLAGS=“-O0” 不优化代码,否则在调试时会出现代码错位的情况。

编译安装后先初始化数据库:mkdir data ; initdb -D data

调试单个应用程序

调试单个程序比较简单,启动emacs后调出gdb,然后在gdb的窗口下使用file命令加载要调试的程序:


调试某个已启动的进程

1)打开终端,调试准备工作。

xhost + : 使postgres用户可以使用emacs,这不是必须,也许你的Linux版本默认允许其它用户直接启动emacs,这也是我前面说的为了避免麻烦可以直接用postgre帐号登录。

. .pgsql:执行配置脚本,这里我把自己的配置写在.pgsql文件里,主要就是设置PATH环境变量

postgres -D data > logfile 2>&1 &:启动postgresql数据库。

emacs & :启动emacs。

 

2)在emacs中启动gdb:

 

3)查看psql这个链接对应的server端进程,这里pid为7141

 

4)加载进程,跟直接使用gdb一样,在gdb交互窗口里输入attach 7141,然后在psql下输入要执行的命令,例如create table t3(c1 int):

 

5)当在psql下按下回车时,psql将命令传给server,但此时处于停止状态,你可以使用gdb的命令,如bt查看当前函数调用栈,f2转到栈的第2层:

 

 

6)使用gdb命令c,到达当前断点处:      

 

7)使用p命令查看某个值,也可以使用x命令查看内存:

 

       关于gdb命令可以查看相应文档。

有用的链接

http://wiki.postgresql.org/wiki/Developer_FAQ 

posted on 2012-01-09 01:47  madahah  阅读(1668)  评论(1编辑  收藏  举报

导航