暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

windows10平台下vs2013调试postgreSQL11.7环境搭建

DBA懒人笔记 2021-04-12
2320

描述:

        学习开源数据库的优势就可以打开源代码,进行断点调试,了解其中具体的过程。目前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.pm DetermineVisualStudioVersion 函数中  
      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懒人笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论