容器中gdb debug PostgreSql
一.背景
工作环境为 Mac,编译打包后的PostgreSQL运行起来,通过gdb调试,出各种错。因而通过容器方式来调试,进一步学习源码。本文介绍如何进行容器制作和gdb调试。
二.操作步骤
介绍在 Mac 上 centos基础镜像拉取,软件包安装,源码下载和编译,安装,调试等:
- Docker基础镜像
#docker pull centos
会拉取最新版本镜像。 - 下载postgres
这里下载的版本为postgres-REL_10_10.zip,
展开到对应本地目录,如 :/Users/sinwaj/software/gp/postgres - 启动容器
#docker run --cap-add=SYS_PTRACE -tid --name postgres -p 5432:5432 -v /Users/sinwaj/software/gp:/gp centos /bin/bash
参数说明:
–cap-add=SYS_PTRACE ,如果不加gdb attach process报ptrace: Operation not permitted
-tid ,后台启动
-v /Users/sinwaj/software/gp:/gp,把容器内目录/gp外挂
-p 5432:5432,端口暴露到host机器 - 容器中安装依赖包
1)查找容器id
#docker ps
2)进入容器
#docker exec -it xxxxx /bin/bash
3)安装依赖
#yum install flex
#yum install bison
#yum install zlib zlib-devel
#yum install readline readline-devel
#yum install perl-ExtUtils-Embed
#yum install zlib zlib-devel
#yum install openssl openssl-devel
#yum install pam pam-devel
#yum install libxml2 libxml2-devel
#yum install libxslt libxslt-devel
#yum install tcl tcl-devel
#yum install openldap openldap-devel
#yum install python python-devel
#yum install make
#yum install net-tools
后续过程中如有缺失可以继续安装
- 编译postgres
1)设置编译参数
#export CFLAGS="-g -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv"
2)配置configure
#cd /gp/postgres
#./configure --prefix=/gp/postgres --enable-depend --enable-cassert --enable-debug
3)编译
#make world -j 2
2表示可以2核并行编译,加快速度。
4)安装
#make install
6.启动postgres