当前位置: 首页 > news >正文

Postgresql-12.5 visual studio-2022 windows 添加pg工程并调试

pg内核学习,记录一下


文章目录

  • 安装包
  • 编译安装
  • VS添加Postgresql工程
  • 调试源码

安装包

(1)perl下载
https://www.perl.org/get.html

(2)diff下载
http://gnuwin32.sourceforge.net/packages/diffutils.htm

(3)添加perl和diff环境变量
在这里插入图片描述

(4)vs2022 community安装
https://visualstudio.microsoft.com/zh-hans/vs/

(5)安装C++桌面开发
在这里插入图片描述
(6)v142组件安装

先切到单个组件
在这里插入图片描述
搜一下v142
因为我下的pg12.5源码是要求用v142编译,到时候根据pg源码需求搜一下相对应的组件安装就好,选对应的生成工具安装

我这里下载MSVCv142-vS 2019 C++ x64/x86生成工具(v14.29-16.11)
在这里插入图片描述

(7)下载pg源码
https://www.postgresql.org/ftp/source/
我安装的是12.5
下载出来是这个安装包,解压一下

注意不能有中文路径
在这里插入图片描述


编译安装

(1)打开VS终端
2017是叫x64本机工具命令提示,2022叫x64 native tools command prompt,开始菜单vs的目录下
在这里插入图片描述
在进行编译前需要安装好perl、diff命令

下面的命令都是在这个终端中执行的

打开prompt,正确确情况是会显示Copyright什么的
在这里插入图片描述

(2)切换到源码目录
cd C:\install\postgresql-12.5\src\tools\msvc

(3)编译
perl build.pl DEBUG

编译完,有两个警告,可以不用管。

(4)回归测试
perl vcregress.pl check

(5)编译安装
perl install.pl C:\install\postgresql-12.5

(6)初始化库
新打开一个cmd窗口

先切换到编译安装的bin目录
cd C:\install\postgresql-12.5\bin

初始化db
initdb.exe -D ..\data

启动服务器
pg_ctl -D ^"^.^.^\data^" -l logfile start

进入psql
psql -d postgres

VS添加Postgresql工程

在postgresql源码目录下有一个pgsql.sln文件双击即可打开。

或者到vs选择打开项目选择pgsql.sln

调试源码

(1) 启动数据库

进入编译安装目录下的/bin目录,

用以下两个命令来启动数据库,如果启动过了,就只用执行psql -d postgres

pg_ctl start  -l logfile -D ../data
psql -d postgres

(2)启动Visual Studio

vs选择打开项目选择pgsql.sln

(3) 添加附加进程
然后点击功能栏中的【调试】->【附加进程】,选择进程列表中的第一个postgres.exe。这里一定要选第一个,附加到后面的几个进程是不能正常调试的。

在这里插入图片描述
如果要确认这个进程是否是自己的PostgreSQL的主进程,可以输入:
select * from pg_backend_pid();
在这里插入图片描述
(4)设置断点

如果不是很清楚应该在哪里设断点,或者无法在自己设置的断点处停下来,可以打开src/backend/tcop/postgres.c文件

可以在解决方案资源管理器搜索postgres.c

右侧解决方案资源管理器可以直接按"ctrl + alt + l" 快捷键进行显示
在这里插入图片描述

然后ctrl+F5,搜索switch (firstchar)

在这里插入图片描述

在这里设个断点
在这里插入图片描述
(5)调试

在终端输入sql语句
select * from pg_backend_pid();

vs就会在断点处停下,调试有三个按键,分别是:逐语句、逐过程和跳出。
在这里插入图片描述
逐语句(F11)是运行实际执行的下一条C语句,如果此处是函数就会进入函数内部;逐过程(F10)是运行该行,如果是函数,会直接执行完成到下一行停下;跳出(shift+F11)是运行完当前的函数跳到外层调用该函数结束的地方
在这里插入图片描述


之后可以在调试之中逐步去学习PostgreSQL的源代码了

http://www.lryc.cn/news/37658.html

相关文章:

  • 长沙学院2023 第一次蓝桥训练题解
  • 云端Docker搭建ABY库以及本地CLion使用
  • ES6-箭头函数、解构赋值、对象简写
  • 【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )
  • HTML 扫盲
  • 项目中用到的责任链模式
  • C++复习笔记--STL的string容器和vector容器
  • 第一章 软件项目管理概述
  • 【Linux系统编程】06:共享内存
  • 【专项】112. 路径总和
  • 【数据结构】堆排序
  • 论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
  • 数据安全—数据完整性校验
  • Java 最小路径和
  • Flask+VUE前后端分离的登入注册系统实现
  • 【Go】用Go在命令行输出好看的表格
  • 怎么处理消息重发的问题?
  • JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)
  • Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
  • java对象的创建与内存分配机制
  • 本地存储localStorage、sessionStorage
  • JavaSE: 网络编程
  • 计算机图形学09:二维观察之点的裁剪
  • 2023Java 并发编程面试题
  • CAD如何绘制A0/A1/A2/A3/A4图框?
  • R 安装 “umap-learn“ python 包
  • 测试同学如何快速开发测试平台?
  • 【程序员接口百宝箱】免费常用API接口
  • 使数组和能被P整除[同余定理+同余定理变形]
  • 25k的Java开发常问的Synchronized问题有哪些?