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的源代码了
相关文章:
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 (…...
长沙学院2023 第一次蓝桥训练题解
每道题都在洛谷上,每个题都有很详细的题解,可以先自行做,不会再看题解。 题目解析思路都写在代码中,中文题面就不单独解释题意了。 P2440 木材加工(二分答案) 链接:P2440 木材加工 解析 代码…...
云端Docker搭建ABY库以及本地CLion使用
文章目录ABY的搭建以及使用前言ABY库的下载、安装及测试CLion配置后续杂项项目改名使用其他的库最后ABY的搭建以及使用 前言 仅做记录,仅供参考,不同人有不同的使用方式命令手敲,可能有错,自己辨识勿问,我懂的也不多…...
ES6-箭头函数、解构赋值、对象简写
箭头函数特点 1、 (只有1个形参) 可以省略() 2、 {} 可以省略 只有一句代码 或 只有返回值的时候,省略return 3、arguments 不可用,arguments在没有形参的时候可以拿到调用函数拿在的实参 获取伪数组通过Array.from转为真数组。 4、 箭头函数没有this, …...
【CSS】CSS 背景设置 ② ( 背景位置 | 背景位置-方位值设置 )
文章目录一、背景位置1、语法说明2、注意事项二、背景位置-方位值设置1、效果展示2、完整代码示例一、背景位置 1、语法说明 如果 盒子的大小 大于 背景图片的大小 , 默认的 图片 位置是 左上角 ; 设置背景位置的 CSS 语法如下 : background-position : length length backgro…...
HTML 扫盲
✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录前言HTML 结构快速生成代码框架HTML 常见标签注释标签标题标签: h1-h6段落标签:p换行标签:br格式化标签…...
项目中用到的责任链模式
目录 1.什么是责任链?它的原理是什么? 2.应用场景 3.项目中的应用 传送门:策略模式,工作中你用上了吗? 1.什么是责任链?它的原理是什么? 将请求的发送和接收解耦,让多个接收对象…...
C++复习笔记--STL的string容器和vector容器
1--string容器string 本质上是一个类,其不同于指针 char*,string 类的内部封装了 char*,用于管理字符串,是一个 char* 型的容器;1-1--string构造函数string 的构造函数原型:string(); // 创建一个空的字符串…...
第一章 软件项目管理概述
项目(Project)是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。项目的特征PMBOK(A guide to the Project management Body Of Knowledge:项目管理知识体系指南)五大过程组和十大知识领域从时间角度出发,项目管理分为五大过程组:启动…...
【Linux系统编程】06:共享内存
共享内存 OVERVIEW共享内存一、文件上锁flock二、共享内存1.关联共享内存ftok2.获取共享内存shmget3.绑定共享内存shmat4.绑定分离shmdt5.控制共享内存shmctl三、亲缘进程间通信1.共享内存写入与读取2.共享内存解绑与删除3.共享内存综合四、非亲缘进程间通信1.通过sleep同步2.通…...
【专项】112. 路径总和
112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 …...
【数据结构】堆排序
堆是一种叫做完全二叉树的数据结构,可以分为大根堆,小根堆,而堆排序就是基于这种结构而产生的一种程序算法。大堆:每个节点的值都大于或者等于他的左右孩子节点的值小堆:每个结点的值都小于或等于其左孩子和右孩子结点…...
论文阅读笔记《GAMnet: Robust Feature Matching via Graph Adversarial-Matching Network》
核心思想 本文提出一种基于图对抗神经网络的图匹配算法(GAMnet),使用图神经网络作为生成器分别生成源图和目标图的节点的特征,并用一个多层感知机作为辨别器来区分两个特征是否来自同一个图,通过对抗训练的办法提高生成器特征提取…...
数据安全—数据完整性校验
1、数据安全保障三要素即 保密性 完整性、可用性机密性:要求数据不被他人轻易获取,需要进行数据加密。完整性:要求数据不被他人随意修改,需要进行签名技术可用性:要求服务不被他人恶意攻击,需要进行数据校验…...
Java 最小路径和
最小路径和中等给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid [[1,3,1],[1,5,1],[4,2,1]]输出&…...
Flask+VUE前后端分离的登入注册系统实现
首先Pycharm创建一个Flask项目: Flask连接数据库需要下载的包: pip install -U flask-cors pip install flask-sqlalchemy Flask 连接和操作Mysql数据库 - 王滚滚啊 - 博客园 (cnblogs.com) sqlAlchemy基本使用 - 简书 (jianshu.com) FlaskVue前后端分…...
【Go】用Go在命令行输出好看的表格
用Go在命令行输出好看的表格前言正文生成Table表头设置插入行表格标题自动标号单元格合并列合并行合并样式设置居中设置数字自动高亮标红完整Demo代码结语前言 最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping&am…...
怎么处理消息重发的问题?
消息队列在消息传递的过程中,如果出现传递失败的情况,发送方会重试,在重试的过程中,可能会产生重复的消息。 消息重复的情况必然存在 关于传递消息时能够提供的服务质量标准,MQTT协议给出了三种不同的标准࿱…...
JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)
JVM 运行时数据区JVM 运行时数据区3.1运行时的数据区组成概述3.1.1程度计数器3.1.2java虚拟机栈3.1.3本地方法栈3.1.4java堆3.1.5方法区3.2程序计数器3.3java虚拟机栈3.4本地方法栈JVM 运行时数据区 堆,方法区(元空间) 主要用来存放数据 是线程共享的. 程序计数器,本地方法栈…...
Oracle ASM磁盘组配置、日常运维、故障处理等操作资料汇总
ASM(自动存储管理)在数据库中是非常重要的组成部分,它可以为磁盘提供统一的存储管理、提高磁盘访问的性能和可用性、简化管理复杂度,从而为数据库的运行提供更好的支持。这里就为大家整理了墨天轮数据社区上一些ASM相关基础知识、…...
UML(Unified Modeling Language,统一建模语言)是一种标准化的可视化建模语言,广泛用于软件系统的需求分析
UML(Unified Modeling Language,统一建模语言)是一种标准化的可视化建模语言,广泛用于软件系统的需求分析、设计与文档化。你列出的是UML 2.x 中最常用的六种结构与行为图,分别属于两大类: ✅ 结构图&#…...
阿姆智创21.5寸工控电脑一体机,硬核性能解锁工业自动化,源头工厂ODM定位解决方案
在工业4.0的浪潮下,SMT产线的精密化运行、MES与ESOP系统的数字化落地、自动化设备的智能化联动,对工业控制终端的综合性能、系统适配性和场景贴合度提出了更高要求。阿姆智创21.5寸工控电脑一体机,以工业级硬核性能为基底,以多系统…...
用 AI 生成视频?试试 Hailuo 视频生成 API!
在现代数字时代,视频内容的需求不断增长,而制作高质量视频的门槛也随之降低。今天,我想和大家分享一个强大的工具——Ace Data Cloud Hailuo 视频生成 API。这款 API 不仅支持文本转语音、多个声音切换和情感调整,还能为你提供清晰…...
Python实战:温度转换小工具开发(附GESP考试真题解析)
Python实战:温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例,也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具,同时深入解析GESP考试中可能遇到的类似题型,帮助初学者掌握Pytho…...
SleeperX:如何彻底解决MacBook电源管理的3个核心痛点
SleeperX:如何彻底解决MacBook电源管理的3个核心痛点 【免费下载链接】SleeperX MacBook prevent idle/lid sleep! Hackintosh sleep on low battery capacity. 项目地址: https://gitcode.com/gh_mirrors/sl/SleeperX 你是否经历过这些场景?正在…...
AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践
AppleRa1n:解锁iOS设备激活锁的专业指南与安全实践 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您面对一台被激活锁困住的iPhone或iPad时,那种无助感就像是拥有一把无法打…...
颈肩痛分急性和慢性,对症缓解才有效
颈肩痛并非单一症状,根据发病时间和诱因,可分为急性颈肩痛和慢性颈肩痛,两者的缓解和治疗方式差异显著,找对方法才能快速摆脱疼痛困扰。急性颈肩痛多由外伤、运动不当、落枕等引起,疼痛剧烈且突然发作,常伴…...
告别手动切割:Pixelorama智能精灵图处理方案
告别手动切割:Pixelorama智能精灵图处理方案 【免费下载链接】Pixelorama A free & open-source 2D sprite editor, made with the Godot Engine! Available on Windows, Linux, macOS and the Web! 项目地址: https://gitcode.com/gh_mirrors/pi/Pixelorama …...
3步掌握开源卡牌编辑器:批量制作桌游卡牌的终极指南
3步掌握开源卡牌编辑器:批量制作桌游卡牌的终极指南 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/CardEd…...
像素幻梦·创意工坊效果展示:从文本描述到可编辑PSD分层像素图的生成能力
像素幻梦创意工坊效果展示:从文本描述到可编辑PSD分层像素图的生成能力 1. 像素艺术的新纪元 在数字艺术创作领域,像素艺术一直保持着独特的魅力。传统的像素画创作需要艺术家逐格绘制,耗时耗力。而如今,像素幻梦创意工坊&#…...
