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工具下载
网址: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目录
- 使用vs2013 x64 本机工具命令提示进行生成解决方案(后续启动源码项目需要使用)
进入postgreSQL源码msvc目录
- 使用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 (编译调试版本)
编译后:
perl vcregress.pl check (编译后检测是否成功)
- 安装数据库软件至base目录还是在postgreSQL源码msvc目录 perl install.pl D:\PostgreSQL\pg117
- 初始化数据文件可以先将D:\PostgreSQL\pg117\bin base目录bin添加到环境变量path中,方便后续pg命令使用initdb.exe -D ../data 此处默认创建的数据库名称为postgres,默认用户为当前windows登录用户,可以手动指定的,和linux中一样
- 启动测试pg_ctl.exe -D D:\PostgreSQL\pg117\data start (本地有多个环境,所以这边指定了data目录)
登录数据库,这里需要指定数据库,默认指定的是当前用户名称,会报不存在
到了第四章节结束,postgreSQL在本地安装完成,日常简单测试就可以直接在cmd中打开库进行测试了,还是比较方便的。如果要断点调试,还需要第五章节的vs项目的生成处理。
五、vs2013postgreSQL项目解决方案生成
1、进入源码目录打开postgreSQL项目
2、生成解决方案
项目生成输出结果:
如果有失败的项目把输出来源换成生成顺序进行查看(半路卡着不动,也是如此操作,有时报错后会一直卡住不动)
3、修改启动项目为postgres,并且设置调试的参数
4、修改源码调试项目中的文件启动配置文件
src\port\pg_config_paths.h
原文件:
修改后:(把这些路径都重新指定我们编译安装数据库软件目录)
注意使用“//”来转义路径
5、去除postgre main函数中check_root的步骤,windows中无法执行
src/backend/main/main.c
6、启动调试
这边看到后台进行已加载完成,并fork出一个cmd进行,输出日志
六、断点调试
断点调试需要选择在合适的地方进行断点,然后按照过程进行一步一步跟踪查看,这边提供下几个用途的断点处:
- 跟踪启动过程src/backend/main/main.c main函数
- sql语句跟踪登录连接并查看进程ID
附加登录连接进程进行调试
在src\backend\optimizer\plan\planner.c :planner()方法打下断点
再次执行SQL语句(发现已卡住不动了)
此时可以在vs2013中 F10进行一步一步跟踪了
总结:
搭建环境其实分为两块,一是源代码编译安装调试版本的postgreSQL数据库,二是把postgreSQL源代码项目生成vs2013可以运行的项目解决方案。断点调试需要选择合适的入口进行跟踪。后续还会有项目源码分析的文章。
作者介绍:
姜正清
现就职乙方公司开源数据库方向DBA,曾就职银联商务MySQL DBA,目前热衷于PostgreSQL数据库学习,会些Python、C#开发、zabbix维护