通過源碼學習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版本的,訪問了他提供的地址,連源碼都找不到,是不是被撤了也不知道,反正網上能下到源碼,幹嗎還用版本控制。
http://download.mysql.cn/ 這個網站能下到源碼,有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()函數中的一個預設斷點中。
調試完成後,控制檯會提示測試結果。