鉴于孙鹏孙老师写了两篇有关图形界面下PostgreSQL源码调试环境的搭建博文,为了适合某些特殊人群(控制台+快捷键)的开发方式,本文基于vim + gdbvim + ctags + cscope + quickfix + taglist + omnicppcomplete + Man_api + minibufexplpp,方式简单介绍一下PostgreSQL调试环境。
调试是一个方面,习惯于这种方式后,以后编写、阅读和分析程序可以使用vim集成化环境,效率还是蛮高的。
第一步:首先将需要的插件都安装上去,可以参考下面链接 (首先要过这一关,也是最麻烦的一关)
1.
vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb 注意可使用最新的vim7.3版本
2.
手把手教你把Vim改装成一个IDE编程环境(图文) 需要注意使用的是vim7.3的版本
3.
拼装的艺术:vim之IDE进化实录 有内置的帮助手册
根据以上说明,总可以打造自己的一个基于VIM的IDE吧,熟悉其中的插件的快捷键的使用,大致配置起来需要
半天左右,能够熟练使用大致需要一周左右吧。
第二步:下载并安装PostgreSQL9.1源代码,其实使用哪个版本调试无所谓,最好使用最新的版本吧
1.下载源码:
http://wwwmaster.postgresql.org/download/mirrors-ftp/source/v9.1.1/postgresql-9.1.1.tar.gz 2.解压缩文件
进入所下载的压缩文件的目录
tar xzvf postgresql-9.1.1.tar.gz
本命令会解压缩
postgresql-9.1.1.tar.gz文件,并在当前目录创建目录postgresql-9.1.1
3.配置源码并生成Makefile
cd postgresql-9.1.1 切换到PostgreSQL源代码目录
./configure --enable-debug --enable-depend --enable-cassert --prefix=/usr/local/postgresql-9.1.1
本配置命令,会生成一个Makefile文件,文件中打开调试功能,依赖检测,启用ASSERT宏检测,并且制定了
PostgreSQL的安装目录为/usr/local/postgresql-9.1.1
如果configure过程中出现错误,请对照,安装相应的模块
4.修改Makefile.global,使gcc编译器不对PostgreSQL源代码进行优化,否则调试时候局部变量被优化掉了,
甚至代码执行时候,上面执行一条语句,下面执行一条,又反复的执行上面一条、下面一条,是优化的结果
vim src/Makefile.global 编辑Makefile.global,使用其他编辑器也可以
找到其中的一行,以CFLAG=开头,将后面的 -O2,删除掉,或者修改为-O0,此处修改将来编译代码时,不对
源代码进行优化处理
5.编译源代码
make
make install
6.配置环境变量
vim ~/.bashrc
在文件.bashrc的尾部添加如下信息
PGDATA=$HOME/data
PGSQL_HOME=/usr/local/postgresql-9.1.1#与./configure --prefix=/usr/local/postgresql-9.1.1相同
LD_LIBRARY_PATH=$PGSQL_HOME/lib
PATH=$PGSQL_HOME/bin:$PATH:$HOME/bin
export PATH PGDATA PGSQL_HOME LD_LIBRARY_PATH
第三步:初始化数据库文件
cd ~/ 进入本用户主目录
mkdir data 创建数据库存放位置
initdb -D data 使用第二步编译生成的可执行程序initdb在~/data目录下创建数据库启动所需文件
第四步:启动数据库
postgres postgres 注意还是在用户的主文件夹下键入本命令
第五步:启动数据库链接的客户端,并且选择服务器生成的为本次链接用得进程pid,调试时候需要用到的
psql postgres
#select pg_backend_pid();
1234 数字是数据库后端返回的自己的进程pid
第六步:生成ctags和cscope索引文件
切换到PostgreSQL-9.1.1源代码根目录,输入vim命令,打开vim
第七步:调试前的准备工作
单击键盘F7键,将vim的键盘映射修改为gdbvim调试时刻的键盘映射
单击键盘中空格键
在弹出的窗口中输入: attach 1234 数字与第五步中的pid一致
单击空格键
弹出空格中输入y attach之后,gdb需要加载所调试进程的符号表,
提示是否添加,当然选择y,回车
单击空格键
在弹出的窗口中输入: break exec_simple_query 添加一个断点,在exec_simple_query函数中停下来
第八步:为调试发送sql命令
切换到运行psql的那个窗口,输入以下信息#号是psql的提示符号,可不是我们输入的
#select amname from pg_am; 注意“;”,sql语句以分号结尾
第九步:开始调试
切换到第六步打开的vim窗口
单击鼠标ctrl+n,单步执行,甚至shift+c,一致执行,直到执行到我们添加过断点的函数exec_simple_query
第八和第九步骤可以反复使用,可以调试所有的sql语句,可能还要添加更多的断点。
调试过程中需要,慢慢的熟练ctags和cscope是怎么使用的,还要熟悉gdb的命令。
最后
祝大家痛并快乐着!
参考:
1.
rhel6+postgresql8.4+postgis1.4+eclipse CDT3.6 调试环境搭建 2.
postgresql8.4+postgis1.5+eclipse CDT3.6 调试环境搭建
https://blog.sciencenet.cn/blog-643407-508018.html
上一篇:
曾经的经典libgist v.2.0/amdb v.1.0下一篇:
计算机前辈Dijkstra被采访的视频中,摘录的部分字幕