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

news2024/11/29 2:29:10

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.coloradmin.cn/o/402082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23届非科班选手秋招转码指南

1.秋招情况介绍 1.1自我介绍 我是一名23届非科班转码选手,本硕均就读于某211院校机械专业,秋招共计拿下12份offer,包括大疆创新、海康威视、联发科技、理想汽车、中电28、阳光电源等各行业、各种性质企业的意向。主要的投递岗位为嵌入式软件…

若依微服务版在定时任务里面跨模块调用服务

第一步 在被调用的模块中添加代理 RemoteTaskFallbackFactory.java: package com.ruoyi.rpa.api.factory;import com.ruoyi.common.core.domain.R; import com.ruoyi.rpa.api.RemoteTaskService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springf…

【springmvc】执行流程

SpringMVC执行流程 原理图 1、SpringMVC常用组件 DispatcherServlet:前端控制器,不需要工程师开发,由框架提供 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求 HandlerMa…

Windows7,10使用:Vagrant+VirtualBox 安装 centos7

一、Vagrant,VirtualBox 是什么二、版本说明1、win7下建议安装版本2、win10下建议安装版本三、Windows7下安装1、安装Vagrant2、安装VirtualBox3、打开VirtualBox,配置虚拟机默认安装地址四、windows7下载.box文件,安装centos 71、下载一个.b…

拐点!新能源车交付均价首次「低于」燃油车,智能电动成新爆点

2023年开局,随着特斯拉打响新能源汽车市场的「价格战」首炮,除部分燃油车品牌(仍依赖自身多年的用户和品牌积累的溢价能力)没有跟进之外,几乎所有的新能源车型都在进行车型价格的下调。 而数据也在反映市场的拐点即将来…

深入理解Zookeeper的ZAB协议

ZAB是什么ZAB(Zookeeper Atomic Broadcast):Zookeeper原子广播ZAB是为了保证Zookeeper数据一致性而产生的算法(指的是Zookeeper集群模式)。它不仅能解决正常情况下的数据一致性问题,还可以保证主节点发生宕…

最全的论文写作技巧(建议收藏)

近10年来,笔者有幸多次参与教学论文的评审工作,在此,特将教学论文写作的步骤及相关问题整理汇总如下: 一、选定论题 (一)论题在文中的地位与作用 严格地讲,论文写作是从选定论题开始的。选题…

Android源码分析 - Parcel 与 Parcelable

0. 相关分享 Android-全面理解Binder原理 Android特别的数据结构(二)ArrayMap源码解析 1. 序列化 - Parcelable和Serializable的关系 如果我们需要传递一个Java对象,通常需要对其进行序列化,通过内核进行数据转发,…

这几个群,程序员可千万不要进!

震惊!某摸鱼网站惊现肾结石俱乐部! (图源V2EX) 无关地域、无关性别,各位程序员们在肾结石这个病上面有着出奇一致的反应。诸如此类的各种职业病在我们的生活中更是十分常见。 也可能是到年纪了,在办公室…

ATTCK v12版本战术介绍——提权(一)

一、引言在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化战术理论知识及实战研究,通过实战场景验证行之有效的检测规则、防御措施,本期我们为大家介绍ATT&CK 14项战术中提权战术(一)&#xff0c…

计算机图形学09:二维观察之点的裁剪

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、二维观察基本…

设计模式4——行为型模式

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它设计算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为&…

[洛谷-P1272] 重建道路(树形背包DP)

[洛谷-P1272] 重建道路(树形背包DP)一、题目重建道路题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例解释限制与约定二、思路1、状态表示2、转移方程3、循环设计4、初末状态三、代码一、题目 重建道路 题目描述 一场可怕的地震后&…

计算机Ping命令使用详解

计算机Ping命令使用详解 在网络中 ping 是一个十分强大的 TCP/IP 工具。它的作用主要为: 1、用来检测网络的连通情况和分析网络速度 2、根据域名得到服务器 IP 3、根据 ping 返回的 TTL 值来判断对方所使用的操作系统及数据包经过路由器数量。 我们通常会用它来直接 ping ip 地…

uni-app api 获取系统信息(高、宽)用法及封装

uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息 uniapp 官网解析地址 uni.getSystemInfo 异步获取系统信息 参数名类型必填说明successFunction是接口调用成功的回调failFunction否接口调用失败的回调函数completeFunction否接口…

腾讯混元AI大模型训练技术揭秘——太极AngelPTM

编者按:秉承“技术提效”理念,腾讯广告不断探索技术能力边界,全面升级广告系统,基于“一大平台、两大模型”持续精进创新研发,提升投放效率与投放效果,助力广告主实现高效的全域经营与生意增长。本篇文章是…

请介绍类加载过程,什么是双亲委派模型?

第23讲 | 请介绍类加载过程,什么是双亲委派模型? Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是&#xff0…

ESP32驱动-红外寻迹传感器驱动

红外寻迹传感器驱动 1、红外寻迹传感器介绍 红外寻迹传感器具有一对红外线发射管与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,输出接口会输出一个数字信号(低电平或高电平,取决于电路…

JVM篇之内存及GC

目录一、JVM内存区域1.1程序计数器1.2虚拟机栈1.3本地方法栈1.4堆1.5方法区二、JVM运行时内存2.1新生代(轻量级GC)2.2老年代(重量级GC)一、JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法栈】、线程共享区域【JAVA 堆、…

蓝桥杯嵌入式PWM_IN(打开中断)

1.原理图 2.配置 3.代码 关键函数 HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1) HAL_TIM_IC_CaptureCallback(TIM_HandTypeDef *htim)//回调函数 HAL_TIM_GET_COUNTER(&htim3) __HAL_TIM_SetCounter(&htim3,0)void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef …