MySQL源码构建和在Gdb中调试的配置过程
通过源码学习C++是我一直以来的习惯,上个月把SGI’s STL源码捣鼓了一下,毕竟是在Win下,配置过程还是很顺利的,这个可以参考侯杰的STL源码,一有空我就深入STL,那个才是基础啊。
但是光有基础是不够的,于是MySQL成了我第三个开源项目的被解剖者,第一个是Myseelite,因为当时要做一个P2P流媒体播放器,是基于那个项目的并且移植到Win下,当然这个是实践性最强的一个项目了。MySQL,STL,Linux这些源码也只能抽空小改改,没有时间完全深入,这个还是很郁闷的,因为白天要上班,项目还是比较紧的那种。
环境:rhel 5 64-bit 一个快被我用烂了的Linux,但是一直没重装过,因为一直保留有快照,万一不行了还原下,呵呵。
网上有用BitKeeper下MySQL源码,估计是类似是CVS SVN的版本控制,下了没用还只能找到2.0版本的,访问了他提供的地址,连源码都找不到,是不是被撤了也不知道,反正网上能下到源码,干吗还用版本控制。
这个网站能下到源码,有4.1.18还有5.0.18的,我下了前者。
前期准备,gcc,autoconf,automake,m4,make等各种工具,我的rhel 5都装好了。
$ tar zxvf mysql-4.1.18.tar.gz
$ cd mysql-4.1.18
$ cp BUILD/compile-pentium-debug BUILD/compile-generic-debug
$ vim BUILD/compile-generic-debug
将文件设置如下:
#! /bin/sh
path=`dirname $0`
. "$path/SETUP.sh"
extra_flags="-g $debug_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings"
extra_configs=""
. "$path/FINISH.sh"
$ BUILD/compile- generic-debug 生成make文件
$make test
如下这步可选,如果你要将MySQL安装到系统目录,那么可以执行
$make install
当然还可以用 $./configure 配置选项
接下来就是最重要的调试了
$cd到mysql-test目录下
$cd t
在t目录下你会发现有很多.test文件,文件内容全是sql语句,是预存在MySQL下提供给我们测试的,当然也可以自己新建一个.test文件,里面写上自己要测试的代码。
测试:
$./mysql-test-run –gdb 测试文件名称(注意不带test)
比如测试drop.test文件,那么命令行便是
$./mysql-test-run –gdb drop
运行后会跳出gdb调试窗口,会跳到mysql_parse()函数中的一个预设断点中。
调试完成后,控制台会提示测试结果。