debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7

1.概览

这个文档指导如何在Centos7下,使用Eclipse IDE 调试PostgreSQL

  • Linux: CentOS7
  • Postgres: postgresql-9.6.18.tar.gz
  • Eclipse:eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz

2.建立用户

创建用户组和用户

groupadd postgre
## 提供密码和home路径
useradd -g postgre -d /home/postgre -m postgre -p 你的密码

/home/postgre目录中,放置postgresql-9.6.18.tar.gz和eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz。同时,赋予权限。

chown -R postgre:postgre eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz postgresql-9.6.18.tar.gz

3.编译postgre

3.1 解压postgresql

su - postgre
tar zxvf postgresql-9.6.18.tar.gz

3.2 编译

cd postgresql-9.6.18/
./configure --prefix=$HOME/workspace/pg9 --enable-debug CFLAGS='-O0'

通过make命令,如果你得到了如下信息All of PostgreSQL successfully made. Ready to install.

$ make -j4

其中-j4,代表中启动4个进程任务,并发make,减少时间。

4.启动Eclipse

创建workspace目录

mkdir -p $HOME/workspace/pg9

解压eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz目录。开启eclipse

# ./eclipse
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0

导入工程。选择[Existing Code as Makfile Porject]

使用eclipse进行make install安装。

看到,有下面的选项卡,双击[install]。

最后在cd /home/postgre/workspace/pg9/目录中,有安装之后的各种文件。

[postgre@localhost ~]$ cd /home/postgre/workspace/pg9/
[postgre@localhost pg9]$ ls -l
总用量 16
drwxr-xr-x 2 root root 4096 6月 21 15:32 bin
drwxr-xr-x 4 root root 4096 6月 21 15:32 include
drwxr-xr-x 4 root root 4096 6月 21 15:32 lib
drwxr-xr-x 3 root root 4096 6月 21 15:32 share

5.设置环境变量&&初始化

设置环境变量:

$ export PATH=$HOME/workspace/pg9/bin:$PATH
$ mkdir -p $HOME/pg9data/data/
$ export PGDATA=$HOME/pg9data/data/

初始化数据库:

$ initdb -D $HOME/pg9data/data/ -U postgre -W

启动服务:

$ pg_ctl -D $HOME/pg9data/data/ -l logfile start

查看服务

[postgre@localhost ~]$ ps -ef |grep postgres
postgre 7140 1 0 15:39 pts/0 00:00:00 /home/postgre/workspace/pg9/bin/postgres -D /home/postgre/pg9data/data
postgre 7142 7140 0 15:39 ? 00:00:00 postgres: checkpointer process
postgre 7143 7140 0 15:39 ? 00:00:00 postgres: writer process
postgre 7144 7140 0 15:39 ? 00:00:00 postgres: wal writer process
postgre 7145 7140 0 15:39 ? 00:00:00 postgres: autovacuum launcher process
postgre 7146 7140 0 15:39 ? 00:00:00 postgres: stats collector process
postgre 7152 15393 0 15:39 pts/0 00:00:00 grep --color=auto postgres

6.连接pg和获取进程

创建zsddb数据库

[postgre@localhost ~]$ createdb zsddb
[postgre@localhost ~]$ psql zsddb
psql (9.6.18)
Type "help" for help. zsddb=#

查看client客户端进程

[postgre@localhost ~]$ ps -ef |grep postgres
postgre 10617 7140 0 16:58 ? 00:00:00 postgres: postgre zsddb [local] idle

从上面可以看到,psql一个客户端的进程连接了上来,pid为10617。我们可以通过这个进程j进行debug

7.eclipse调试pg

右键postgresql-9.6.18,选择Debug As,然后选择Debug Configuration

然后在选择C/C++ Attach Application,在选择我们编译安装好的/home/postgre/workspace/pg9/bin/postgres

然后选择Apply,再选择Debug

后面会弹出一个选择进程的对话框.通过输入postgres,选择10617就可以开始debug了。

8.debug数据库pg的一个简单的select语句

postgres=# CREATE TABLE test (id serial PRIMARY KEY, name VARCHAR(20));
CREATE TABLE
postgres=# INSERT INTO test VALUES(1, 'test1');
INSERT 0 1
postgres=# INSERT INTO test VALUES(2, 'test2');
INSERT 0 1
postgres=# SELECT id, name FROM test;
id | name
----+-------
1 | test1
2 | test2
(2 rows)

我们先插入一些语句。

在上述的情况下,我们的如果没有打Breakpoint的话,我们可以直接顺利执行如上的语句。

现在呢?我们开始做一个断点,如下图:

然后,我们再次进行输入如下语句:

zsddb=# SELECT id, name FROM test;
....现在是hang住的情况,为什么呢,因为我们的代码设置了断点。现在可以通过eclipse进行分析

我们通过使用bt命令,可以看到后台传输了什么数据,如下我们可以看到query_string指向的是 SELECT id, name FROM test;语句。

dbname=0x2879c20 "zsddb", username=0x2879c08 "postgre"可以看到dbname是zsddb,用户是postgre.

可以也知道内存位置是在0x2879c20.

可以使用F5进行一步一步看怎么执行的,也可以通过Ctrl+鼠标左键进入函数里面。看里面干什么。

到此,我们可以看到这种方法,也同样适用于debug MySQL数据库和Redis数据库等。

debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7的更多相关文章

  1. 最新 Eclipse IDE下的Spring框架配置及简单实例

    前段时间开始着手学习Spring框架,又是买书又是看视频找教程的,可是鲜有介绍如何配置Spring+Eclipse的方法,现在将我的成功经验分享给大家. 本文的一些源代码来源于码农教程:http:// ...

  2. 定制Eclipse IDE之界面篇

    为什么要定制IDE?      在工作时候,当公司有了自己的框架,给自己开放人员用,甚至是可以卖的时候,我们可以做成一个产品,而这个产品将包括框架本身.文档.工具.教程等等.工具之中最重要的莫过于开发 ...

  3. eclipse ide for java ee developers 开发环境搭建(j2ee)

    转载自:http://www.iteye.com/topic/982182 真的是一片很不错的文章啊! 使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指 ...

  4. Maven、gradle、Ant、Eclipse IDE

    Maven.gradle.Ant.Eclipse IDE之间的关系 http://wenku.baidu.com/view/d33208810912a21615792910.html?from=sea ...

  5. 怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)

    <span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 25.99 ...

  6. eclipse ide for java ee developers 开发环境搭建(J2EE) 【转载】

    使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指导,专门讲解了一下Eclipse开发环境的搭建过程, 一是帮助他们尽快的熟悉IDE的使用,二也是保证团队 ...

  7. Eclipse IDE for Java EE Developers 与 Eclipse Classic(Eclipse Standard)区别

    Eclipse下载官网:http://www.eclipse.org/downloads/ 版本: 1.Eclipse classic(Eclipse Standard):Eclipse的标准版; 2 ...

  8. 定制Eclipse IDE之杂症篇

    上文回顾:定制Eclipse IDE之插件篇(二) 该篇将讲述在开发Eclipse 插件过程发生的疑难杂症.不谈功能,只说病症. 前言.拿哪个Eclipse作为定制的基础? 我建议是你用哪个Eclip ...

  9. 定制Eclipse IDE之插件篇(二)

    上文回顾:定制Eclipse IDE之插件篇(一) 延续上一篇的插件篇,这一篇将会讲到一个最关键的插件aptana. 一.aptana插件 官方的解释我就不说了,从下面图可以看到插件提供了什么功能,列 ...

随机推荐

  1. python之robotframework+pycharm测试框架

    一.robotframework简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式 ...

  2. [python爬虫]简单爬虫功能

    在我们日常上网浏览网页的时候,经常会看到某个网站中一些好看的图片,它们可能存在在很多页面当中,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标 ...

  3. Parrot os安装docker及docker-compose

    一.安装docker 1.添加Docker pgp key curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key ...

  4. 《学习scrapy框架爬小说》的进一步完善

    一.完善目标: 1.为方便使用,把小说拼音或英文名,小说输出中文名,第一章节url地址变量化,修改这些参数即可爬取不同的小说. 2.修改settings.py设置文件,配置为记录debug的log信息 ...

  5. SpringBoot 及其 基本原理(一)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 前言: 分布式架构及微服务理念 1.SOA理念(思想) SOA :即 Service Oriented ...

  6. Java实现 LeetCode 659 分割数组为连续子序列 (哈希)

    659. 分割数组为连续子序列 输入一个按升序排序的整数数组(可能包含重复数字),你需要将它们分割成几个子序列,其中每个子序列至少包含三个连续整数.返回你是否能做出这样的分割? 示例 1: 输入: [ ...

  7. Java实现 蓝桥杯 算法训练 2的次幂表示

    算法训练 2的次幂表示 时间限制:1.0s 内存限制:512.0MB 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式, ...

  8. Java实现 蓝桥杯VIP 算法提高 传染病控制

    算法提高 传染病控制 时间限制:1.0s 内存限制:512.0MB 问题描述 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的 ...

  9. Java实现 蓝桥杯 算法提高 字符串压缩

    试题 算法提高 字符串压缩 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩: (1) 如果该字符是 ...

  10. java实现最大镜像子串

    ** 最大镜像子串** [代码填空](满分12分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两 ...