天天看点

使用 gdb 调试 postgres greenplum

错误信息的获取途径有几种 : 

1. 最简单的就是看PostgreSQL的log文件.

2. 在PostgreSQL中可以使用psql的 \set VERBOSITY verbose 来输出详细的错误信息, 

3. 或者使用linux的strace跟踪这个发生错误的进程.

4. 使用gdb (GNU Debugger) 来调试则是一种比较深入但是非常有用的工具.

下面就以前面我在使用pgsql_fdw时遇到的问题使用gdb来做个简单的演示 : 

要让postgresql能够使用gdb进行调试, 首先要在编译PostgreSQL时打开enable-debug.

例如, 使用如下方法编译 : 

在满足这个条件后, 初始化数据库

使用gdb进行调试 : 

会话1 : 

获取当前进程的pid.

会话2 : 

使用gdb, 绑定到会话1获取到的进程PID.

在出错的函数处设置断点(b getTypeOutputInfo) : 

执行那个报错的函数 : 

继续执行(c), 跟踪到getTypeOutputInfo的输入参数如下 : 

查看截止到断点前的所有调用(bt或backtrace) : 

注意这里的结果和实际的调用顺序是反的, 如, #1的execute_query调用了#0的getTypeOutputInfo

其他常用gdb指令 : 

print

next

nexti

【参考】

1. (gdb) 是gdb的命令行提示符.

2. http://en.wikipedia.org/wiki/GNU_Debugger 

3. http://wiki.postgresql.org/wiki/Pgsrcstructure

4. gdb 所有指令 : 

(gdb) help all