一、 postgresql源码编译安装

因为只是用来调试的测试环境,把基本的软件装好和库建好就可以,一切从简。

1. 创建用户和目录

mkdir -p /data/postgres/base/
mkdir -p /data/postgres/etc
mkdir -p /data/postgres/home/postgres
mkdir -p /data/postgres/toolsmkdir -p /data/postgres/pg5432/datagroupadd -g 502 dba
useradd -u 501 -g dba postgres -d /data/postgres/home/postgreschown -R postgres:dba  /data/postgres

2. 配置limits.conf

vi /etc/security/limits.confpostgres soft nproc 2047
postgres hard nproc 16384
postgres soft nofile 1024
postgres hard nofile 65536
* soft stack 10240
* hard stack 32768

3. 安装依赖包

yum -y install readline-devel
yum -y install python-devel
yum -y install perl-devel
yum -y install libuuid-devel
yum -y install gcc
yum -y install flex
yum -y install bison
yum -y install perl-ExtUtils-Embed
yum -y install zlib-devel
yum -y install systemd-devel.i686
yum -y install systemd-devel.x86_64

4. postgresql安装

特别注意要加--enable-debug,--enable-dtrace也建议加上,后面可以结合Dtrace工具分析,不过安装过程会变慢不少。

tar -zxvf postgresql-14.0.tar.gz
cd postgresql-14.0/./configure --prefix=/data/postgres/base/14.0/ --with-libedit-preferred --with-perl --with-python --with-uuid=e2fs --with-systemd --enable-debug --enable-dtrace
make world
make check
make install-world

编辑环境变量

su - postgres

vi .bash_profile

## Add for postgresql
export PGHOME=/data/postgres/base/14.0
export PGDATA=/data/postgres/pg5432/data
export PATH=$PGHOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib
export LANG=en_US.UTF-8

source .bash_profile

初始化并启动

initdb -D /data/postgres/pg5432/data -E UTF8 --locale=en_US.utf8
pg_ctl -D /data/postgres/pg5432/data -l logfile start

二、 gdb调试测试

1. psql连接,查看进程号

psqlselect pg_backend_pid();
-- 返回 104728
create table t_insert(id int,c1 char(10),c2 char(10),c3 char(10));

2. gdb连接,设置断点

[root@DB02 ~]# gdb -p 104728
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-110.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
...
(gdb) b PageAddItemExtended
Breakpoint 1 at 0x78d040: file bufpage.c, line 199.

3. psql执行语句

insert into t_insert values(1,'11','12','13');
-- 会一直卡住,等待gdb调试

4. gdb调试

这里只是简单试试,后篇会有具体案例

(gdb) c
Continuing.

Breakpoint 1, PageAddItemExtended (page=page@entry=0x7fd5fc857f80 "", item=0x27d4e10 "\337\002", size=61, offsetNumber=offsetNumber@entry=0, 
    flags=flags@entry=2) at bufpage.c:199
199     {
(gdb) p *item
$1 = -33 '\337'
(gdb) bt
#0  PageAddItemExtended (page=page@entry=0x7fd5fc857f80 "", item=0x27d4e10 "\337\002", size=61, offsetNumber=offsetNumber@entry=0, 
    flags=flags@entry=2) at bufpage.c:199
#1  0x00000000004d54c0 in RelationPutHeapTuple (relation=relation@entry=0x7fd60e1aa4a8, buffer=buffer@entry=283, tuple=tuple@entry=0x27d4df8, 
    token=token@entry=false) at hio.c:62
#2  0x00000000004c695b in heap_insert (relation=relation@entry=0x7fd60e1aa4a8, tup=tup@entry=0x27d4df8, cid=cid@entry=0, 
    options=options@entry=0, bistate=bistate@entry=0x0) at heapam.c:2109
#3  0x00000000004d23d8 in heapam_tuple_insert (relation=0x7fd60e1aa4a8, slot=0x27d4ce8, cid=0, options=0, bistate=0x0) at heapam_handler.c:252
#4  0x000000000065a56c in table_tuple_insert (bistate=0x0, options=0, cid=<optimized out>, slot=0x27d4ce8, rel=0x7fd60e1aa4a8)
    at ../../../src/include/access/tableam.h:1374
#5  ExecInsert (mtstate=mtstate@entry=0x27d3a38, resultRelInfo=resultRelInfo@entry=0x27d3c48, slot=0x27d4ce8, 
    planSlot=planSlot@entry=0x27d42e8, estate=estate@entry=0x27d37d8, canSetTag=<optimized out>) at nodeModifyTable.c:934
#6  0x000000000065b98b in ExecModifyTable (pstate=0x27d3a38) at nodeModifyTable.c:2561
#7  0x0000000000630462 in ExecProcNode (node=0x27d3a38) at ../../../src/include/executor/executor.h:257
#8  ExecutePlan (execute_once=<optimized out>, dest=0x27b1968, direction=<optimized out>, numberTuples=0, sendTuples=false, 
    operation=CMD_INSERT, use_parallel_mode=<optimized out>, planstate=0x27d3a38, estate=0x27d37d8) at execMain.c:1551
#9  standard_ExecutorRun (queryDesc=0x27e4858, direction=<optimized out>, count=0, execute_once=<optimized out>) at execMain.c:361
#10 0x0000000000797e0a in ProcessQuery (plan=<optimized out>, sourceText=0x26f00a8 "insert into t_insert values(1,'11','12','13');", 
    params=0x0, queryEnv=0x0, dest=0x27b1968, qc=0x7ffe95113e40) at pquery.c:160
#11 0x0000000000798824 in PortalRunMulti (portal=portal@entry=0x2753998, isTopLevel=isTopLevel@entry=true, 
    setHoldSnapshot=setHoldSnapshot@entry=false, dest=dest@entry=0x27b1968, altdest=altdest@entry=0x27b1968, qc=qc@entry=0x7ffe95113e40)
    at pquery.c:1266
#12 0x0000000000798b4d in PortalRun (portal=portal@entry=0x2753998, count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=true, 
    run_once=run_once@entry=true, dest=dest@entry=0x27b1968, altdest=altdest@entry=0x27b1968, qc=qc@entry=0x7ffe95113e40) at pquery.c:786
#13 0x0000000000794ab6 in exec_simple_query (query_string=0x26f00a8 "insert into t_insert values(1,'11','12','13');") at postgres.c:1214
#14 0x0000000000795f23 in PostgresMain (argc=argc@entry=1, argv=argv@entry=0x7ffe951142f0, dbname=0x271b9a8 "postgres", 
    username=<optimized out>) at postgres.c:4486
#15 0x0000000000487b8a in BackendRun (port=<optimized out>, port=<optimized out>) at postmaster.c:4506
#16 BackendStartup (port=0x2713530) at postmaster.c:4228
#17 ServerLoop () at postmaster.c:1745
#18 0x0000000000717d4d in PostmasterMain (argc=argc@entry=3, argv=argv@entry=0x26eabd0) at postmaster.c:1417
#19 0x00000000004889c2 in main (argc=3, argv=0x26eabd0) at main.c:209

三、 gdb常用命令

一般调试时代码输出是这样的

有个非常好用的命令 Ctrl+x a 可以一边查看代码一边调试

参考

使用GDB分析PostgreSQL

程序调试  |  GDB常用命令备忘录 - 简书

GDB常用命令大全 GDB 命令详细解释_Rolei_kezhu的博客-CSDN博客_gdb命令

postgresql源码学习(一)—— 源码编译安装与gdb调试入门相关推荐

  1. PostgreSQL源码学习(一)编译安装与GDB入门

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 PostgreSQL源码学习(一)编译安装与GDB入门 前言 一.安装PostgreSQL 1.获取源码 2.配置 3.编译 3.安装 ...

  2. linux fluent gcc,GCC编译UDF和gdb调试UDF

    Fluent版本:19.0 前面我们介绍过使用VS来编译和调试UDF,其实我们也可以用GCC来编译UDF.gdb调试UDF.本次介绍的方法更具有通用性,也适用于Linux下Fluent的UDF编译和调 ...

  3. Mahout学习之Mahout简介、安装、配置、入门程序测试

    一.Mahout简介 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个 ...

  4. vue源码学习--vue源码学习入门

    本文为开始学习vue源码的思路整理.在拿到vue项目源码的之后看到那些项目中的文件夹,会很困惑,不知道每个文件夹内的世界,怎么变换,怎样的魔力,最后产生了vue框架.学习源码也无从学起.我解决了这些困 ...

  5. Java源码学习--00源码目录介绍

    源码目录中的   rj.jar就是我们需要学习的源码所在目录,打开后发现有,com,java,javax,jdk,org,sun等不同的包 我们学习源码肯定需要排除干扰,如com,jdk,sun,or ...

  6. 网络yum源 自定义yum仓库 zip备份 编译安装

    Top NSD SERVICES DAY01 案例1:补充应用技巧 案例2:软连接与硬连接 案例3:man手册.zip备份 案例4:自定义yum软件仓库 案例5:发布及测试yum仓库 案例6:vim效 ...

  7. Linux学习4 yum仓库 编译安装 sed基本用法

    目录 1.yum配置多个网络源 2.yum配置本地局域网私有源仓库 3.编译安装http2.4版本 3.利用sed 取出ifconfig命令中本机的IPv4地址 4.删除/etc/fstab文件中所有 ...

  8. 在Ubuntu 14.04 64bit下编译安装rtmpdump并调试输出

    2011年那会儿就开始研究rtmp, 但是后来很快又换了公司转作Android移动浏览器项目,就一直没有机会 继续进行下去.现在因为工作需要,我又重新捡使起来, 继续进行中断了几年的工作.下面记录下我 ...

  9. *迟来的爱*——《Foursquare》应用源码学习(一) 下载、编译、运行

    做Android项目做到好几年的程序,发现技术进步很慢,逐渐往管理发展..于是, 要看开源项目,学习别人的成功经验,来解决项目中遇到的棘手问题. 于是看到了别人推荐的android的开源源码,找了一个 ...

最新文章

  1. 计算机老师用英语应聘,应聘计算机教师个人自荐书(精选6篇)
  2. 教你打造千万用户的海量视频网站、保卫云端安全!
  3. 使用Nomad和OpenFaaS提供FaaS服务
  4. 关闭计算机网络端口,怎么关闭135和500端口?
  5. 《IPv6安全》——1.7 推荐读物和资料
  6. 83998 连接服务器出错_来申请一个阿里云服务器玩玩?
  7. 网易暴力裁撤绝症员工后,多益网络徐波、孙宇晨都要出钱给该离职员工治病!...
  8. c# oldb连接_(转)C#连接OleDBConnection数据库的操作
  9. SQL.H 通过此文件寻找sqlAPI编程的一种捷径
  10. python保持登录状态_Python-保持登录状态进行接口测试
  11. ValueError: optimizer got an empty parameter list
  12. DB2数据库迁移,数据库导入导出
  13. Dukto 文件传输软件(推荐)
  14. python怎么表达我喜欢你的句子_关于我喜欢你的优美句子
  15. Simple Usage of Sort in Golang
  16. 弗兰克·盖里为华纳兄弟设计新总部,犹如漂浮在高速公路的‘冰山’
  17. 用键盘输入一位整数,当输入1~7时,显示对应的英文星期名称的缩写。
  18. Spring5基础知识
  19. android 屏幕旋转
  20. Linux系统下计算机C语言的编程技巧

热门文章

  1. 深度学习tensorflow ---男人变女人4
  2. 赛尔号服务器维护怎么玩,赛尔号新手攻略 七天让你摆脱新手成为高玩
  3. 利用mathtype向word插入右编号的公式
  4. 手机里tencent文件夹能删吗_手机SD卡Tencent文件夹里面哪些可以删?
  5. Illustrator 教程:了解路径和曲线
  6. 记一次android项目编译错误的解决过程
  7. python中的format
  8. c#和Python交互,完美解决Python调用OpenCV等第三方库以及分发时需配置python环境的问题
  9. 好看颜色搭配集合——matplotlibPPT画图可用
  10. el-menu导航菜单右侧的下拉图标消失/自定义icon