学习需要,仅此记录,以供参考。 如有缺漏,敬请指正!
1、安装MSYS2
可参考博客:
https://blog.csdn.net/ymzhu385/article/details/121449628
(1)下载安装程序
直接下载:https://download.csdn.net/download/weixin_45867695/87637416
(2)安装
双击.exe文件,根据安装向导完成安装(建议不要安装在C盘)。
【注】:安装完成之后,记得添加环境变量。我添加了msys2的路径和mingw64的bin路径:
(3)添加国内镜像源
可以参考这篇博客:https://blog.csdn.net/john_bh/article/details/104652224
【注】:我自己安装之后,直接去升级安装包,总是会报错error: failed retrieving file ‘clang32.db’ from repo.msys2.org : Connection time-out,不难看出,这是repo.msys2.org 网站连接超时导致,问题就出在镜像源。
解决方法:
添加镜像源,同时注释掉镜像文件中的repo.msys2.org 内容。
镜像文件设置位置:
msys2安装目录下的ect/pacman.d文件夹下所有文件名为mirrorlist的文件。
(4)更新软件包
打开MSYS2,输入命令:pacman -Su
(5)安装MinGW-w64、gcc等编译工具链
参考博客:https://blog.csdn.net/ScienceRui/article/details/117392080
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
(6)检测gcc和make版本
打开MSYS2 MINGW64命令行界面,输入gcc -v
和make -v
,如果能出来版本信息,则证明安装成功。
2、下载postgresql源码
官网:https://www.postgresql.org/ftp/source/
下载好之后,解压。
3、源码编译
① 打开MSYS2 MSYS,进入到postgresql源码的文件夹目录下
② 输入命令:./configure --prefix=/f/postgresql-src/postgres-build/ --without-Zlib --enable-debug
postgres-build是我新建的一个文件夹,用来存放编译后的文件,prefix后的路径就是编译后产生的文件的存放位置。 后续要调试源码,一定要记得加上--enable-debug
参数!
③ 开始编译安装
输入:make install
,首次编译时间会比较久。
4、启动数据库
启动MSYS2 MINGW64命令行界面,切换到安装目录的bin文件夹下(例如,我的是f:\postgresql-src\postgres-build\bin)
初始化数据库:./initdb -D ../data
启动数据库并开启日志记录:./pg_ctl start -l logfile -D ../data
连接数据库:./psql -d postgres
获取当前session的后台进程号pid:select pg_backend_pid();
【后台进程号在调试代码时可以用到】
4、visual studio code 调试源码
(1)安装vscode并下载一些c++/c的插件
参考博客:https://blog.csdn.net/msdcp/article/details/127033151
(2)vscode打开源码文件
打开vscode,【File】-【Open Floder】选择postgresql的源码文件夹(不是编译文件夹)打开。
(3)配置launch.json文件
点击【run and debug】(左侧栏第四个选项),会自动生成launch.json文件的模板,然后修改对应自己程序的launch.json文件内容。
参考博客:https://blog.csdn.net/qq_39690706/article/details/121062011
{
"version": "0.2.0",
"configurations": [
{
"name": "postgres --help",
"type": "cppdbg",
"request": "launch",
"program": "F:/postgresql-src/postgres-build/bin/postgres",
"args": [
"--help"
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "initdb",
"type": "cppdbg",
"request": "launch",
"program": "F:/postgresql-src/postgres-build/bin/initdb",
"args": [
"-D",
"<datadir>"
],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
{
"name": "附加",
"type": "cppdbg",
"request": "attach",
"program": "F:/postgresql-src/postgres-build/bin/postgres",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
【注】:launch.json文件中有launch和attach的区别。launch是vscode启动这个程序进行调试;attach是附加在已经启动的程序上进行调试。
如果要使用attach进行调试的话,需要启动数据库,并查询自己当前的进程号,在vscode中选择“附加”这个调试项,然后选择自己的进程号,就可以根据在数据库中的交互来定位和调试代码啦!
主要修改的地方就是编译后exe文件的位置,替换成自己的目录。
(4)调试
可以在main.c文件的main函数体的第一行打上断点,然后选择调试项进行调试。
(5)修改后编译
在源码中添加自己修改的代码之后,Ctrl+S保存修改内容。
打开MSYS2 MINGW64命令行界面,进入源码文件目录,输入make
进行编译,如果无报错(有报错就按照报错提示修改代码),则在编译完成之后输入make install
,进行编译后安装,完成后就可以看自己修改的代码有没有生效了。
学习需要,仅此记录,以供参考。 如有缺漏,敬请指正!