天天看點

使用 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