Windows调试Postgresql
PostgreSQL的代码是在Linux环境下开发的,想要移植到Windows下调试还是需要费一番精力的,不过好在最新的版本9.3.4相比以前还是方便了很多。以下是我个人的一次成功移植的记录。
一、环境:
- 操作系统:win8 64bit
- 集成环境:Visual Studio 2013 SP4
- PostgreSQL:9.3.4
- 所需工具:Git-1.9.2-preview20140411(ActivePerl)。安装该工具后,不需要再安装perl、flex、bison等。
二、安装步骤:
需要先安装VS和GIT(或者ActivePerl),后再进行如下操作。(我的调试环境、数据库均准备安装在D:\db中,以下以该目录进行说明,源代码解压到D:\db\postgresql-9.3.4目录中)
用VS的CMD工具(D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts中的“VS2013 x64 本机工具命令提示”),在D:\db\postgresql-9.3.4\src\tools\msvc路径下执行:
build DEBUG
注释掉D:\db\postgresql-9.3.4\src\backend\main\main.c的“check_root(progname);”这一行。
修改D:\db\postgresql-9.3.4\src\tools\msvc\Mkvcbuild.pm中的
my $vsVersion = DetermineVisualStudioVersion();
为:
my $vsVersion = '12.00';
创建数据库目录(以在新建db目录为例),用cmd在D:\db\postgresql-9.3.4\src\tools\msvc路径下执行:
install D:\db\db
cmd里在D:\db\postgresql-9.3.4\db\bin
路径下执行:
initdb dbtest
用VS打开D:\db\postgresql-9.3.4\pgsql.sln,对postgres
工程增加命令参数:
-D D:\db\db\bin\dbtest
如下图所示:
并且修改src\port\pg_config_paths.h如下:
#define PGBINDIR "D:\\db\\db\\bin"
#define PGSHAREDIR "D:\\db\\db\\share"
#define SYSCONFDIR "D:\\db\\db\\etc"
#define INCLUDEDIR "D:\\db\\db\\include"
#define PKGINCLUDEDIR "D:\\db\\db\\include"
#define INCLUDEDIRSERVER "D:\\db\\db\\include\\server"
#define LIBDIR "D:\\db\\db\\lib"
#define PKGLIBDIR "D:\\db\\db\\lib"
#define LOCALEDIR "D:\\db\\db\\share\\locale"
#define DOCDIR "D:\\db\\db\\doc"
#define HTMLDIR "D:\\db\\db\\doc"
#define MANDIR "D:\\db\\db\\man"
调试。在D:\db\postgresql-9.3.4\db\bin路径下执行:
"pg_ctl" -D "dbtest" -l logfile start //启动数据库
psql –d postgres -p 5433 //连接数据库,5433为端口。
然后VS的调试->添加到进程菜单中,把所有或者你运行的那个postgres.exe进程添加进来(必需在建立连接之后),设置所需的断点。执行语句来调试,如图:
三、问题及解决
在2.2步时,报错:
原因分析是脚本执行时不识别VS的具体版本号。
Unable to determine Visual Studio version: The nmake version could not be determined. at src/tools/msvc/Mkvcbuild.pm line 63.
解决:将Mkvcbuild.pm等文件中的DetermineVisualStudioVersion换成具体的版本号。创建库时,报错:loading system objects’ descriptions … FATAL: invalid byte sequence for encoding “UTF8”: 0xb9
解决:之前的路径中存在中文,改成全英文的路径后问题消失
四、其它
相对于以前想要移植PG到windows上要安装一大堆相关库和软件,如今简直是傻瓜安装。基本上就这几个关键点:VS工程生成,PG相关数据库路径设置,VS进程调试。遇到问题多分析或上网找找,能弄好应该问题不大。