本文将要介绍在Windows10上用Visual Studio调试运行PostgreSQL源码的方法。在学习源码的过程中,仅仅看源码的话,理解运行逻辑和顺序会很困难,因此调试就是一项必不可少的技能。
一、启动数据库
假设我们已经编译好源代码生成了可执行文件,并且进行了初始化,我们可以进入pgdb/bin
目录,用以下两个命令来启动数据库。如果这里不明白,可以去看之前写过的PG源码安装的博客:点这里。
pg_ctl start -l logfile -D ../data
psql -d postgres
二、启动Visual Studio
首先打开源码所在的目录。点击左上角的【文件】->【打开】->【项目/解决方案】,找到数据库源码所在的文件夹,点击pgsql.sln文件,就可以打开解决方案了。
然后点击功能栏中的【调试】->【附加进程】,选择进程列表中的第一个postgres.exe。这里一定要选第一个,附加到后面的几个进程是不能正常调试的。
如果要确认这个进程是否是自己的PostgreSQL的主进程,可以输入:
select * from pg_backend_pid();
我们这里输入一下,可以看到确实10680进程确实是主进程。
三、设置断点和调试
如果知道自己要使用调试的功能在哪一部分,可以直接在要调试的部分设置断点。在右下角会显示调用的函数堆栈,在左下角可以查看变量。如果不是很清楚应该在哪里设断点,或者无法在自己设置的断点处停下来,可以打开src/backend/tcop/postgres.c文件,在第4311行处设置断点,目前我尝试的所有操作都会经过这里。
断点处停下之后,调试有三个按键,分别是:逐语句、逐过程和跳出。逐语句是运行实际执行的下一条C语句,如果此处是函数就会进入函数内部;逐过程是运行该行,如果是函数,会直接执行完成到下一行停下;跳出是运行完当前的函数跳到外层调用该函数结束的地方。此外,还可以点击【继续】按钮,会继续执行知道下一个断点处停下。
学会这个技能之后,就可以在调试之中逐步去学习PostgreSQL的源代码了。