1、PostgreSQL代码分析、调试 工具介绍,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,Source Insight,Windows下的代码阅读工具 功能简介 查看函数/结构体定义 返回原来
2、的位置 查看哪些函数调用了该函数 搜索特定字符串 其他 用法简介 新建工程 阅读代码,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,Emacs+etags,Emacs:功能最强大的编辑器 用emacsetags阅读代码 在Shell中 进入源码目录: cd postgresql/src 生成TAGS文件: ./tools/make_etags 在Emacs中 跳到函数/结构体定义:Alt-. 再次查找定义 Ctrl-
3、u Alt-. 返回:Alt-* (Alt-Shift-8) 高级:Emacs+cscope,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,使用GDB进行Debug,安装postgresql 运行configure命令时指定 enable-debug 启动postgres 用psql连接数据库 服务端启动进程处理连接 查看处理连接的服务端进程postgres的进程号 ps ef | grep postgres,使用G
4、DB进行Debug(续),启动gdb,attach到相应进程 gdb gdb attach 24203 开始debug 设置断点:break exec_simple_query 单步执行:next/step 查看变量的值:print 等等 特点 命令行方式 可以用tab键补齐命令 健壮,不直观,不易上手,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,KDevelop,KDevelop 集成的开发环境 configur
5、e, make, gdb, grep, find, ctags, cvs, etc. 功能 编译、安装程序 查找函数/结构体定义 debug,查看运行时刻变量的值,允许单步执行 等等 推荐喜欢IDE方式的同学使用 易上手、偶尔会异常退出,KDevelop使用,导入工程 编译安装PostgreSQL 使用KDevelop进行Debug 开始Debug模式 查看变量的值 其他功能 修改代码 修改 编译安装 测试,用KDevelop导入工程,将下载的源码包放到某个目录下 打开kdevelop,导入工程 选择菜单Projectimport,选择源码所在目录,工程类型为generic-c-applica
6、tion(automake-based)。 设置工程属性。 选择菜单projectproject options configure options-configure arguments,设为-enable-debug -with-pgport=xxxx-prefix=$PATH/TO/INSTALL Run Options-main program,设为空 Debugger-debugging shell,设为空,用KDevelop安装数据库,configure BuildRun Configure make BuildBuild Project make install Buildins
7、tall 其他 BuildClean Project:删除make产生的文件 BuildDistclean:删除configure产生的文件,用KDevelop进行debug,安装PostgreSQL后,初始化数据库,启动postgres,用psql连接数据库 安装目录是在configure中指定的目录 Kdevelop中,attach进程 Debug菜单下的Attach to Process 选择对应psql的服务端进程 在psql中发送SQL语句,此时,在KDevelop中可以开始debug。,查看变量的值,debug时,可以查看变量运行时刻的值 点击“加号”可以展开结构体 如果变量的类型
8、是void*? 不能查看其值,需要确定其类型 很多结构体是“继承”自Node结构体的 强制类型转换为(Node*),用print语句可以查看其具体类型:print (Node*)XXX 得到其具体类型后,可以在gdb中或者在变量查看窗口中查看其内部属性的值 不总是有效:如果不是“继承”自Node,KDevelop的其他功能,查看栈的状态 Frame Stack 查看断点 Breakpoints 查找函数/结构体定义 CTAGS 其他 欢迎大家挖掘、相互交流,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelo
9、p 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,PostgreSQL自带的工具(1),回归测试工具 Shell下,make之后,make check 测试已有的功能是否正确 建议修改代码之后运行回归测试,看你的修改是否影响了其他功能 98个测试点 如果有错 测试结果:src/test/regress/output,PostgreSQL自带的工具(2),Bench mark测试工具 ./contrib/pgbench 可以进行TPC-B测试 可以运行自己的测试文件 使用方法 ./contrib/pgbench/README.pgbench 特点 使用方便
10、自带功能不够强大,PostgreSQL自带的工具(3),./src/tools/目录下 一般而言,执行方式是,shell下进入到源码的根目录,运行 ./src/tools/some_command make_diff 记录修改的文件,生成diff文件 修改某文件前,cp file.c file.c.orig 所有修改完成后,生成diff文件./src/tools/make_diff/difforig file.diff 开源组织中,提交一份修改一般是提交diff文件 参看README,PostgreSQL自带的工具(4),make_etags 生成emacs需要的TAGS文件:./src/to
11、ols/make_etags,Linux相关工具,windows访问linux ssh登录linux:SecureCRT 图形界面远程登陆Linux:RealVNC 在Linux下设置共享目录:samba(windows用server_ip 可以访问) 编辑器:KDevelop / Vi / Emacs,有用的Shell命令,find find ./ -name *.chy:在当前目录(./)下,查找后缀名为c或者h或者y(yacc文件)的文件 find ./ -name *.chy mtime -1:查找最近一天内(-1)修改的文件 grep 在文件中检索关键词: grep keyword
12、filename 在某个目录下查找包含关键字的文件 find ./ -name * | xargs grep KeyWord 修改文件的最后修改时间 touch filename,提纲,代码阅读工具 Windows:Source Insight Linux:Emacsetags Debug工具 GDB KDevelop 其他有用的工具 PostgreSQL自带的工具 有用的Shell命令 性能测试工具,性能测试工具,BenchMark Factory for Databases 模拟并发的用户、事务,再现生产环境,测试数据库性能 通过ODBC连接数据库进行测试 http:/ 标准测试Bench Mark AS3AP TCP-C etc.,新建工程选择标准Bench Mark,新建工程选择Bench Mark,新建工程确定表的规模,