快捷搜索:  汽车  科技

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)进入postgreSQL源码msvc目录三、辅助插件安装(win10为基准)四、postgreSQL编译安装调试过程需要先使用postgreSQL源码安装至本地电脑,而且需要编译成可调试版本,并且初始化数据文件,设置相应启动参数。

描述:

学习开源数据库的优势就可以打开源代码,进行断点调试,了解其中具体的过程。目前linux 平台常用的是强大的gdb,断点功能试过,不太习惯。本人有段.net开发经历,比较热衷于微软的Visual Studio 工具。其中vs2013版本编译调试pg和MySQL都比较方便,错误比较少,vscode也是可以的。下面来介绍下编译调试环境的搭建。

一、vs2013工具下载

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(1)

网址:https://msdn.itellyou.cn/ 下载链接: ed2k://|file|cn_visual_studio_ultimate_2013_x86_dvd_3175316.iso|3077509120|ADDA34B2BC29E1571276AE50A220EB91|/

二、vs2013安装

  • 记得勾选c 开发环境,其他不需要的环境可以去除不勾选,节省空间
  • 就算安装目录放在其他磁盘,C盘还是会被强行占用几G的空间
  • 注册码什么的,这个工具微软还是良心好找的,比如JetBrains什么的动不动就失效了......

三、辅助插件安装(win10为基准)

  • 万能的perl,windows平台为ActivePerl,ActivePerl-5.26.3.exe
  • bison-2.4.1-setup.exe
  • windows-flex-2.5.35 (https://www.postgreSQL.org/ftp/misc/winflex/)
  • diff工具
  • 将Flex、Bison、Perl、diff的物理路径设置为系统path环境变量(后续出现perl、bison、flex命令找不到,都是因为环境变量的问题)

四、postgreSQL编译安装

调试过程需要先使用postgreSQL源码安装至本地电脑,而且需要编译成可调试版本,并且初始化数据文件,设置相应启动参数。

  • postgreSQL11.7下载并解压https://www.postgresql.org/ftp/source/v11.7/
  • 创建base和data目录

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(2)

  • 使用vs2013 x64 本机工具命令提示进行生成解决方案(后续启动源码项目需要使用)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(3)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(4)

进入postgreSQL源码msvc目录

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(5)

  • 使用perl进行编译修改源码文件是关于判断vs版本的方法

src/tools/msvc/VSObjectFactory.pmDetermineVisualStudioVersion函数中if($output=~/(\d )\.(\d )\.\d (\.\d )?$/m)这行改成if($output=~/(\d )\.(\d )\.\d (\.\d ).*$/m)实际就是将?改成.*

perl build.pl DEBUG (编译调试版本)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(6)

编译后:

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(7)

perl vcregress.pl check (编译后检测是否成功)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(8)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(9)

  • 安装数据库软件至base目录还是在postgreSQL源码msvc目录 perl install.pl D:\PostgreSQL\pg117

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(10)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(11)

  • 初始化数据文件可以先将D:\PostgreSQL\pg117\bin base目录bin添加到环境变量path中,方便后续pg命令使用initdb.exe -D ../data 此处默认创建的数据库名称为postgres,默认用户为当前windows登录用户,可以手动指定的,和linux中一样

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(12)

  • 启动测试pg_ctl.exe -D D:\PostgreSQL\pg117\data start (本地有多个环境,所以这边指定了data目录)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(13)

登录数据库,这里需要指定数据库,默认指定的是当前用户名称,会报不存在

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(14)

到了第四章节结束,postgreSQL在本地安装完成,日常简单测试就可以直接在cmd中打开库进行测试了,还是比较方便的。如果要断点调试,还需要第五章节的vs项目的生成处理。

五、vs2013postgreSQL项目解决方案生成

1、进入源码目录打开postgreSQL项目

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(15)

2、生成解决方案

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(16)

项目生成输出结果:

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(17)

如果有失败的项目把输出来源换成生成顺序进行查看(半路卡着不动,也是如此操作,有时报错后会一直卡住不动)

3、修改启动项目为postgres,并且设置调试的参数

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(18)

4、修改源码调试项目中的文件启动配置文件

src\port\pg_config_paths.h

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(19)

原文件:

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(20)

修改后:(把这些路径都重新指定我们编译安装数据库软件目录)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(21)

注意使用“//”来转义路径

5、去除postgre main函数中check_root的步骤,windows中无法执行

src/backend/main/main.c

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(22)

6、启动调试

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(23)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(24)

这边看到后台进行已加载完成,并fork出一个cmd进行,输出日志

六、断点调试

断点调试需要选择在合适的地方进行断点,然后按照过程进行一步一步跟踪查看,这边提供下几个用途的断点处:

  • 跟踪启动过程src/backend/main/main.c main函数

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(25)

  • sql语句跟踪登录连接并查看进程ID

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(26)

附加登录连接进程进行调试

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(27)

在src\backend\optimizer\plan\planner.c :planner()方法打下断点

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(28)

再次执行SQL语句(发现已卡住不动了)

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(29)

此时可以在vs2013中 F10进行一步一步跟踪了

postgresql9.6创建服务器(windows10平台下vs2013调试postgreSQL11.7环境搭建)(30)

总结:

搭建环境其实分为两块,一是源代码编译安装调试版本的postgreSQL数据库,二是把postgreSQL源代码项目生成vs2013可以运行的项目解决方案。断点调试需要选择合适的入口进行跟踪。后续还会有项目源码分析的文章。

作者介绍:

姜正清

现就职乙方公司开源数据库方向DBA,曾就职银联商务MySQL DBA,目前热衷于PostgreSQL数据库学习,会些Python、C#开发、zabbix维护

猜您喜欢: