用Eclipse追PostgreSQL源碼

本篇主要講述了怎麼用Eclipse追PostgreSQL源碼的過程。使用的Eclipse版本是Juno Service Release 2,PG的版本是postgresql 9.2.2。 linux

首先第一步就是要安裝編譯好的PostgreSQL(見Eclipse編譯PostgreSQL 9.2.2)。在Eclipse上打開Make Target 視圖(Window->Show View->Other->Make->Make Target)。右鍵本工程,選擇New,建立一個名字,以下圖所示: sql



雙擊install。等待一小會兒,在控制檯窗口顯示PostgreSQL installation complete就安裝成功了。安裝的默認路徑是在Eclipse編譯PostgreSQL 9.2.2中配置的HOME路徑,這時會發如今該目錄下出現了一個project的文件夾,裏面就是安裝好的PG數據庫,如圖所示: shell


第二步,是對數據庫進行初始化。首先設置一下數據庫將要存放的文件夾目錄。代碼以下: 數據庫

export PATH=$HOME/project/bin:$PATH
export PGDATA=DemoDir
initdb
執行initdb稍等片刻會顯示以下提示:



第三步:調試PG。回到Eclipse中,右鍵本身的pg工程,選擇Run as->Run Configurations->C/C++ Application->pgsql Default,並進行以下配置: ubuntu

配置完成後點擊run,在控制檯中會顯示以下所示: 服務器


這代表你的pg數據庫已經在運行了(啓動了6個postgres的進程),在監控是否有命令的輸入,這是你能夠從終端起pg客戶端進行操做。 函數

第四步:Debug PostgreSQL。在Debug以前先對Debug進行配置,右鍵本身的pg工程,選擇Debug As->C/DebugConfigurations->進行配置,配置的參數參照步驟三。 post

以後仍是右鍵本身的pg工程,選擇Debug As->C/C++ Application,選擇postgres,以下圖所示: spa


點擊OK後工程會自動運行並跳轉到main函數的入口,以下圖所示,這是就能夠一步一步的運行了。 .net

第五步:監聽客戶端的進程(子進程),看其執行步驟。首先打開終端,啓動數據庫的服務器端進程。進入安裝數據庫目錄的bin目錄下,並執行下面的代碼:

./postgres -D /home/lzl/PG/postgresql-9.2.2/DemoDir/

須要注意的是,在linux下的環境變量中不會默認有當前目錄的,若是須要的話能夠自行配置一下,也可利用./尋找當前目錄下的可執行文件。執行完後便可啓動數據庫的服務器端,以下圖所示:

這是最好記錄一下啓動的6個postgres的進程pid,方便後面對客戶端進行監聽時進程的選擇。

另起一個終端,仍是進入到安裝數據庫目錄的bin目錄下,第一次運行時默認以後系統自帶的三個數據庫,因此先要建立一個本身的數據庫,例如我建立一個pgtest的數據庫,執行命令以下所示:

./createdb pgtest
建立好後進入到這個數據庫中,執行命令:

./psql pgtest

獲得的結果以下圖所示:

接下來回到Eclipse中,右鍵本身的pg工程,選擇Debug As->C/DebugConfigurations->C++ Attach to Application->pgsql Default(Attach)(這個名稱能夠自行命名)。對其的配置以下所示:

點擊Debug會彈出一個選擇進程的窗口,查找和postgre相關的進程,找到剛剛啓動的客戶端的那個postgres的進程,如圖所示:


可是在點擊OK後,發現顯示Could not attach to process的錯誤提示,以下圖:


此時須要進行以下的配置(見參考連接2),首先打開終端而且換到root帳戶,並執行命令:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

返回結果爲0。

這時回到Eclipse中,從新運行剛纔的任務並選擇好進程後點擊OK,這時Eclipse已經能夠捕獲到該進程的命令了。

這裏舉個例子,能夠找到postgres工程中的postgres.c文件(這個是psql命令的入口地方),搜索一下simple,就會看到一個大的switch語句,加個斷點,如圖所示:


在客戶端中執行命令:\dt,就會跳轉到斷點的位置,接下來就能夠自行的追源碼了。

Eclipse追PostgreSQL源碼的過程就講到這裏,歡迎你們補充。


參考連接1:http://wiki.postgresql.org/wiki/Working_with_Eclipse

參考連接2http://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process

相關文章
相關標籤/搜索