pg内核源码解析课上用的vs调试pg源码,

VS用起来确实方便,但是配置调试环境着实有点麻烦。首先得装个windows系统,最好是xp,win7稍微麻烦点;最好使用vs05,08和10也可以,但是比05还麻烦;此外还得装个perl,最好再装上cygwin以及其他一大堆linux上原生的东西。然后才能生成vs的工程,生成工程保不准会遇上一些参数配置问题。关键是pg很多都是跑在linux上的啊,在windows上有些与系统调用有关的代码执行和linux上是不一样,比如创建进程。如果不关心这些系统调用的东西,得益于pg源码很好的平台兼容性,我们也是可以在windows上研究和修改pg源码的。可是如果我们修改了pg的源码,要验证在服务器上的效果,还得打个包传到服务器上,重新编译、运行。运行的时候还没法在线调试,只能打日志。

鉴于以上的问题,最终还是放弃了鸡肋一般的vs。可如果在linux上用gdb调试,也实在有点hold不住。于是就用eclipse吧。

参考:http://wiki.postgresql.org/wiki/Working_with_Eclipse [1]

我的系统环境:

centos6.4_x64

gcc.4.4.7

eclipse-c/c++ kepler

postgresql 9.3

下面是我的配置过程:

1. 安装必要的软件

# yum install git readline* zlib* bison flex java-1.7.0*

上述这些软件在某些linux系统中可能已经安装了。

2. 下载pg源码

源码可以用git从pg的repository里下载:

[bhq@localhost ~]$ mkdir project
[bhq@localhost ~]$ cd project
[bhq@localhost ~]$ git clone git://git.postgresql.org/git/postgresql.git

下载完成后,在project目录下会有一个postgresql目录,里面就是pg的源码。[1]中的pg版本比较老,下载后是postgres目录,并将其重命名为pgsql。

也可以直接下载:http://www.postgresql.org/ftp/source/ 之后解压到project目录下。

3. configure源码

在终端中:

[bhq@localhost ~]$ cd postgresql
[bhq@localhost ~]$ ./configure --prefix=$HOME/project --enable-depend --enable-cassert --enable-debug

其中的$HOME/project 是指刚才下载源码时创建的那个project目录。这个目录会被用来存放pg编译之后生成的文件和目录。没有报error就configure成功了。

4. 配置eclipse

http://www.eclipse.org/downloads/ 下载Eclipse IDE for C/C++ Developers。

打开eclipse之后,在package explorer中importpostgresql工程。操作过程和[1]中Import一节一样。只是import完成之后,我的eclipse没有自动开始make。于是手动make:

在eclipse的package explorere视图中右击postgresql的工程-> make targets-> create 。填入install-> OK。然后在package explorere视图中右击postgresql工程-> make targets -> build,选择刚才新建的install,OK。最后在console中可以看到“postgreSQL installation complete”就表示make instal成功了。以后每次修改源码之后都要重新make。

5. initdb

在终端中:
[bhq@localhost ~] $ mkdir ~/pgdata
[bhq@localhost ~] $ cd project
[bhq@localhost ~] $ ./bin/initdb -D ~/pgdata

-D后的目录用于存放pg的配置文件和数据库文件,这个目录的所有者必须是启动pg和eclipse的用户。(由于ntfs文件系统不支持用户权限,所以不要把这个目录放在ntfs的分区上,用win linux双系统的人可能会遇到这个问题)

6. 运行和调试pg

参考[1]中run configuration in eclipse、Add include files、debugging postgresql from eclipse、Debugging with child processes
这四节。注意不要先运行起来再调试,不然端口就被占了。

最后小结一下:
pg的文档实在写得太好了。

Linux+eclipse+gdb调试postgresql源码的更多相关文章

  1. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  2. 修改,编译,GDB调试openjdk8源码(docker环境下)

    在上一章<在docker上编译openjdk8>里,我们在docker容器内成功编译了openjdk8的源码,有没有读者朋友产生过这个念头:"能不能修改openjdk源码,构建一 ...

  3. nginx模块_使用gdb调试nginx源码

    工欲善其事必先利其器,如何使用调试工具gdb一步步调试nginx是了解nginx的重要手段. ps:本文的目标人群是像我这样初接触Unix编程的同学,如果有什么地方错误请指正. 熟悉gdb的使用 这里 ...

  4. Eclipse远程调试hadoop源码

    1. 修改对应调试端口 之前的一篇blog里讲述了hadoop单机版调试的方法,那种调试只限于单机运行hadoop命令而已,对于运行整个hadoop环境而言是不可取的,因为hadoop会开启多个jav ...

  5. GDB调试qemu源码纪录

    今天介绍下如何利用gdb调试qemu 1.首先获取qemu源码 获取地址:https://www.qemu.org/ 2.编译安装qemu 进入qemu目录 ./configure --enable- ...

  6. [原创]在Windows和Linux中搭建PostgreSQL源码调试环境

    张文升http://ode.cnblogs.comEmail:wensheng.zhang#foxmail.com 配图太多,完整pdf下载请点这里 本文使用Xming.Putty和VMWare几款工 ...

  7. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  8. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  9. 跟踪调试JDK源码时遇到的问题及解决方法

    目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...

随机推荐

  1. Linux磁盘设备文件(sda,sdb,sdc…)变化问题

    在Linux下往往会碰到这样的问题,磁盘的设备文件,比如/dev/sda, sdb, sdc等等在某些情况下会混乱掉,比如sda变成了sdb或者sdc变成了sdb等等,这样无形中会导致磁盘设备管理的混 ...

  2. mysql 修复表和优化表

    REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化表

  3. table标签

    table标签使我们最常用的的标签,在使用table标签时我们要注意一些其属性,早期我们经常使用table标签对其进行页面布局但是现在我们基本不再使用,由此可见table标签也是非常强大的一个工具. ...

  4. Android Studio导入GitHub上的项目常见问题(以图片轮播开源项目为实例)

    前言:github对开发者而言无疑是个宝藏,但想利用它可不是件简单的事,用Android studio导入开源项目会遇到各种问题,今天我就以github上的一个图片轮播项目为例,解决导入过程中的常见问 ...

  5. linux开关机命令

    1.reboot重启 2.shutdown -r now 立即重启 root用户使用,与reboot命令相同 3.shutdown -r 10 过10分钟后重启root用户使用 4.shutdown ...

  6. 微信移动客户端内部浏览器分享到朋友圈,QQ空间代码

    http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html <script src="http://re ...

  7. Ubuntu 11.10开启root用户登陆

    以管理员身份运行 #sudo gedit /etc/lightdm/lightdm.conf 将里面改成 "autologin-user=root" 就可以以root用户登录了

  8. C++拾遗(九)类与动态内存分配(1)

    创建类时编译器自动生成以下成员函数(如果用户没有定义): 1.默认构造函数 2.拷贝构造函数 3.赋值操作符 4.默认析构函数 5.地址操作符 以下一一说明: 构造函数 构造函数在创建对象时被调用. ...

  9. 晓说智能指针shared_ptr为何可以实现跨模块分配和释放内存

    最近做项目, 有个地方是外包人员写的, 其中有个函数,大致这样 void getInfo(std::shared_ptr<Info>& outInfo); 这个函数是一个dll(链 ...

  10. 使用 ADD-ON SDK 开发 基于 Html JQuery 和 CSS 的 firefox 插件入门教程1: 创建一个简单的 Add-on

    [本文转载自http://sixpoint.me/942/implementing-simple-addon/] 实现一个简单的插件 教程的这个部分带你使用 SDK 来实现, 运行并打包一个插件. 这 ...