在Ubuntu 14.04上使用Eclipse開發和調試PosgreSQL9.3.4

來源:互聯網
上載者:User

標籤:

0.準備階段
新增PG帳號,用於初始化、啟動和關閉資料庫
sudo groupadd postgres
sudo useradd -g postgres -m postgres
sudo passwd postgres

為postgres使用者組指定sudo許可權:
ll /etc/sudoers
sudo chmod 740 /etc/sudoers
ll /etc/sudoers
sudo vim /etc/sudoers
在%sudo處添加:
%postgres ALL=(ALL:ALL) ALL
將檔案許可權改回去:
sudo chmod 440 /etc/sudoers

使postgres使用者的bash生效:
sudo vim /etc/passwd
修改postgres行:
postgres:x:1001:1001::/home/postgres:

postgres:x:1001:1001::/home/postgres:/bin/bash

 

建立資料庫的資料目錄並設定其許可權:
sudo mkdir -p /db/pgdata
sudo chown -R postgres:postgres /db/pgdata

 

以postgres身份登入到Ubuntu。

1.下載並安裝JDK
下載JDK(~/software):jdk-8u5-linux-i586.tar.gz
解壓:
cd /opt
sudo mkdir jdk
sudo cp -r ~/software/jdk-8u5-linux-i586.tar.gz /opt/jdk
cd jdk
sudo tar zxvf jdk-8u5-linux-i586.tar.gz

設定全域的環境變數:
sudo vim /etc/profile
在檔案最後增加:
export JAVA_HOME=/opt/jdk/jdk1.8.0_05
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

立即生效:source /etc/profile

將系統預設的jdk修改過來
sudo update-alternatives --install /usr/bin/java java /opt/jdk/jdk1.8.0_05/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /opt/jdk/jdk1.8.0_05/bin/javac 300
sudo update-alternatives --config java
sudo update-alternatives --config javac
檢測
java -version

 

2.下載並安裝Eclipse
(1)在http://www.eclipse.org/下載Eclipse C/C++的Linux版本(~/software):eclipse-cpp-kepler-SR2-linux-gtk.tar.gz
解壓縮:(目前的目錄/opt/jdk)
cd ..
sudo tar zxvf ~/software/eclipse-cpp-kepler-SR2-linux-gtk.tar.gz
產生eclipse目錄。

在Ubuntu中啟動終端,進入該目錄啟動Eclipse:
[email protected]:~$ cd /opt/eclipse/
[email protected]:/opt/eclipse$ ./eclipse
選擇workspace工作目錄為:/home/postgres/workspace


(2)配置代碼
再開啟一個終端:
安裝組件:
[email protected]:~$ sudo apt-get install make gcc g++ tar libreadline6-dev zlib1g-dev bison flex
[email protected]:~$ sudo apt-get install openssl libssl-dev
[email protected]:~$ sudo apt-get install libpam-dev
[email protected]:~$ sudo apt-get install libxml2 libxml2-dev
[email protected]:~$ sudo apt-get install  libxslt-dev
[email protected]:~$ sudo apt-get install tcl tcl-dev
[email protected]:~$ sudo apt-get install libperl-dev
[email protected]:~$ sudo apt-get install python python-dev

安裝systemtap:
[email protected]:~$ sudo apt-get install systemtap systemtap-sdt-dev
檢查stap:
[email protected]:~$ stap --version

下載源碼(~/software):postgresql-9.3.4.tar.gz
解壓:
[email protected]:~$ cd
[email protected]:~$ mkdir project
[email protected]:~$ cd project
[email protected]:~/project$ tar zxvf ~/software/postgresql-9.3.4.tar.gz
[email protected]:~/project$ mv postgresql-9.3.4 pgsql
[email protected]:~/project$ cd pgsql

配置:
[email protected]:~/project/pgsql$ ./configure --prefix=$HOME/pgsql --with-pgport=5432 --with-perl --with-python --with-tcl --with-openssl --with-pam  --without-ldap --with-libxml  --with-libxslt  --enable-thread-safety  --with-wal-blocksize=16 --with-blocksize=16 --enable-dtrace --enable-depend --enable-cassert --enable-debug


(3)匯入代碼
在Eclipse主介面,點擊File-Import,選擇"C/C++"-"Existing Code as Makefile Project",Next,
在彈出的"Import Existing Code"對話方塊中,設定
Project Name:pgsql
Existing Code Location:/home/postgres/project/pgsql
Language:選擇C,必須去掉"C++"複選框
Toolchain for Indexer Settings:選擇Linux GCC
單擊"Finash"按鈕。

 

4.開發與調試
(1)建立Make Target
在調試PostgreSQL之前,首先需要將其安裝到某個目錄中,在Eclipse中是通過建立一個Make Target實現的。
在工程pgsql上單擊右鍵,選擇Make Targets-Create,在彈出的"Create Make Target"對話方塊中,輸入:
Target name:install
單擊OK。

編譯安裝:
在工程pgsql上單擊右鍵,選擇Make Targets-Build,選擇install,單擊Build。
直到出現"PostgreSQL installation complete.",表示安裝完成。

此時,在$HOME/pgsql目錄下,會產生bin、include、lib和share目錄。

此時可以關閉eclipse了。


(2)嘗試運行資料庫
回到命令列,設定目前使用者的環境變數:
[email protected]:~$ cd
[email protected]:~$ vim ./.profile
在末尾添加:

# add PG env
export PATH=$PATH:$HOME/pgsql/bin
export PGDATA=/db/pgdata

export PATH=$PATH:$HOME/pgsql/bin
export PGDATA=/db/pgdata
立即生效:[email protected]:~$ source ./.profile

初始化資料庫目錄:
[email protected]:~$ initdb -D $PGDATA -E UTF8 --locale=C -U postgres -W
(密碼名字全拼)

初始化成功後,開啟新的終端,執行source ./.profile,然後重新開啟Eclipse,在pgsql上單擊右鍵,Run as-Run Configurations,
在彈出的Run Configration對話方塊中的左側,雙擊C/C++ Application,會建立一個一個名稱為pgsql Default的配置介面:
Main選項卡:
C/C++ Application:src/backend/postgres
Project:pgsql
切換到Arguments選項卡:
Program arguments:-D /db/pgdata

單擊Apply,然後單擊Run。
直到出現資訊
"LOG:  database system was shut down at 2014-04-16 17:34:34 CST
LOG:  autovacuum launcher started
LOG:  database system is ready to accept connections"
表示資料庫已成功啟動。

查看postgres進程和相關後台進程:ps -ef | grep postgres

此時,可以在命令列,測試一下:
查看資料庫:
psql -l
建立資料庫:
createdb DemoDB
psql -l
登入剛才建立的資料庫(進行操作):
psql DemoDB
退出PostgreSQL:
\q


(3)調試資料庫代碼
資料庫運行成功後,一定要關閉已經開啟的Postmaster進程才能進行調試,否則會提示"Postmaster已經存在"的錯誤。
關閉已啟動的資料庫進程:
點擊Console面板右側的紅色Terminate關閉表徵圖,即可關閉。
查看postgres進程,確認是否關閉:ps -ef | grep postgres

如果要調試Postgresql源碼,要保證安裝了gdb:sudo apt-get install gdb


單擊工程右鍵,Debug As-Local C/C++ Application,選擇"postgres"作為偵錯工具,單擊OK,即可進入偵錯模式。

此時程式自動會在main函數處停下,所以要繼續點擊工具列上的"Resume"按鈕讓主進程運行完,否則無法串連資料庫。Debug運行完後會有和運行成功時一樣的提示資訊。

開啟一個終端,查看postgres進程:ps -ef | grep postgres

debug模式的按鈕簡介:
Resume(F8):重新開始執行debug,一直運行直到遇到breakpoint
Suspend:暫掛
Terminate:終止
Disconnect:斷開
Step Into:跳入
Step Over:跳出
Step Return:執行完當前函數,然後return跳出該函數


(4)服務進程(postgres的子進程)的調試
使用psql登入:
psql
查看其進程號:select pg_backend_pid();
注意:記住這個進程號,如2800。

開啟另一個終端,輸入ps -ef | grep postgres
發現此時,多了一個進程:
postgres  2800  2776  0 15:42 ?        00:00:00 postgres: postgres postgres [local] idle

回到Eclipse調試介面,單擊菜單Run-Debug Configure,在彈出的Debug Configurations介面,雙擊C/C++ Attach to Application:
配置介面:
Name:postgres
Main選項卡:
C/C++ Application:src/backend/postgres
Project:pgsql
Build configuration:取消"Select configuration...",選擇"Use Active"
單擊Debug,然後會出現一個進程選擇視窗,輸入"post"在程式的進程列表中,選擇進程號(2800)對應的postgres進程。
單擊OK。

此時會遇到一個問題:
Could not attach to process.  If your uid matches the uid of the target
process, check the setting of /proc/sys/kernel/yama/ptrace_scope, or try
again as the root user.  For more details, see /etc/sysctl.d/10-ptrace.conf
從ubuntu10.10開始,除非進程B是進程A的子進程,或者進程A為root運行,否則進程A不能調試進程B。這樣一來增加了進程的安全。這個安全限制是預設的,但是可以通過修改設定檔來達到任意進程A可以調試進程B的目的。
解決方案:
1.可以通過下面的命令對這個限制進行臨時修改,但是重啟後限制依舊存在。
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
2.可以通過修改設定檔來接觸限制(我選擇了這種方式)
sudo vim /etc/sysctl.d/10-ptrace.conf
修改前:
kernel.yama.ptrace_scope = 1
修改後:
kernel.yama.ptrace_scope = 0
重啟作業系統之後可以生效。

修改之後,再次調試子進程,單擊OK,可以看到已經將調試工具掛上了這個postgres進程。

斷點調試:
在postgres工程中的postgres.c檔案(這個是psql命令的入口地方)中,搜尋一下simple,就會看到一個大的switch語句,在這行加個斷點。
回到命令列,輸入一條SQL:
select 1+2;
回到Eclipse介面,程式停在了斷點處,然後就可以在Eclipse中來追蹤PostgreSQl的執行過程了。

 

在Ubuntu 14.04上使用Eclipse開發和調試PosgreSQL9.3.4

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.