博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Eclipse追PostgreSQL源码
阅读量:6715 次
发布时间:2019-06-25

本文共 1935 字,大约阅读时间需要 6 分钟。

hot3.png

本篇主要讲述了怎么用Eclipse追PostgreSQL源码的过程。使用的Eclipse版本是Juno Service Release 2,PG的版本是postgresql 9.2.2。

首先第一步就是要安装编译好的PostgreSQL(见)。在Eclipse上打开Make Target 视图(Window->Show View->Other->Make->Make Target)。右键本工程,选择New,创建一个名字,如下图所示:

双击install。等待一小会儿,在控制台窗口显示PostgreSQL installation complete就安装成功了。安装的默认路径是在中配置的HOME路径,这时会发现在该目录下出现了一个project的文件夹,里面就是安装好的PG数据库,如图所示:

第二步,是对数据库进行初始化。首先设置一下数据库将要存放的文件夹目录。代码如下:

export PATH=$HOME/project/bin:$PATHexport PGDATA=DemoDirinitdb
执行initdb稍等片刻会显示如下提示:

第三步:调试PG。回到Eclipse中,右键自己的pg工程,选择Run as->Run Configurations->C/C++ Application->pgsql Default,并进行如下配置:

配置完成后点击run,在控制台中会显示如下所示:

这表明你的pg数据库已经在运行了(启动了6个postgres的进程),在监控是否有命令的输入,这是你可以从终端起pg客户端进行操作。

第四步:Debug PostgreSQL。在Debug之前先对Debug进行配置,右键自己的pg工程,选择Debug As->C/DebugConfigurations->进行配置,配置的参数参照步骤三。

之后还是右键自己的pg工程,选择Debug As->C/C++ Application,选择postgres,如下图所示:

点击OK后工程会自动运行并跳转到main函数的入口,如下图所示,这是就可以一步一步的运行了。

第五步:监听客户端的进程(子进程),看其执行步骤。首先打开终端,启动数据库的服务器端进程。进入安装数据库目录的bin目录下,并执行下面的代码:

./postgres -D /home/lzl/PG/postgresql-9.2.2/DemoDir/

需要注意的是,在linux下的环境变量中不会默认有当前目录的,如果需要的话可以自行配置一下,也可利用./寻找当前目录下的可执行文件。执行完后即可启动数据库的服务器端,如下图所示:

这是最好记录一下启动的6个postgres的进程pid,方便后面对客户端进行监听时进程的选择。

另起一个终端,还是进入到安装数据库目录的bin目录下,第一次运行时默认之后系统自带的三个数据库,所以先要创建一个自己的数据库,例如我创建一个pgtest的数据库,执行命令如下所示:

./createdb pgtest
创建好后进入到这个数据库中,执行命令:

./psql pgtest

得到的结果如下图所示:

接下来回到Eclipse中,右键自己的pg工程,选择Debug As->C/DebugConfigurations->C++ Attach to Application->pgsql Default(Attach)(这个名称可以自行命名)。对其的配置如下所示:

点击Debug会弹出一个选择进程的窗口,查找和postgre相关的进程,找到刚刚启动的客户端的那个postgres的进程,如图所示:

但是在点击OK后,发现显示Could not attach to process的错误提示,如下图:

此时需要进行如下的配置(见),首先打开终端并且换到root账户,并执行命令:

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

返回结果为0。

这时回到Eclipse中,重新运行刚才的任务并选择好进程后点击OK,这时Eclipse已经可以捕获到该进程的命令了。

这里举个例子,可以找到postgres工程中的postgres.c文件(这个是psql命令的入口地方),搜索一下simple,就会看到一个大的switch语句,加个断点,如图所示:

在客户端中执行命令:\dt,就会跳转到断点的位置,接下来就可以自行的追源码了。

Eclipse追PostgreSQL源码的过程就讲到这里,欢迎大家补充。

参考链接1:

参考链接2

转载于:https://my.oschina.net/liuzeli/blog/115397

你可能感兴趣的文章
实现iOS图片等资源文件的热更新化(一): 从Images.xcassets导出合适的图片
查看>>
glom模块的使用(二)
查看>>
Centos-Mysql复制备份还原数据库
查看>>
(5)Python字典
查看>>
ES6(Proxy 和 Reflect)
查看>>
React 路由状态管理总结
查看>>
禅道 11.3 版本发布,主要完善细节,修复 bug
查看>>
无人机新用途,可精确识别危险海洋生物并向游泳者发出预警
查看>>
(一) virtualenv虚拟环境安装
查看>>
Android官方开发文档Training系列课程中文版:分享简单数据之从其它APP接收简单数据...
查看>>
OpenSSL将于9月22日发布多个漏洞补丁
查看>>
大数据助推新型智库建设
查看>>
新加坡欲重组通信和媒体管制机构
查看>>
《CCNP ROUTE 300-101学习指南》——2.2节构建EIGRP拓扑表
查看>>
《为自己工作——世界顶级设计师成功法则》目录—导读
查看>>
Libreboot 项目向开源社区示好和致歉
查看>>
《CMYK 2.0——设计师色彩管理手册》—第1章1.3节副作用
查看>>
java.util.concurrent.locks.LockSupport
查看>>
红帽加入 Node.js 基金会白金会员
查看>>
《OpenGL编程指南》一2.7 独立的着色器对象
查看>>