探索MySQL源代码–准备工作

mysql源代码,编译的时候要注意添加如下选项,增加symbol

./configure --with-debug

使用git来查看自己对源代码做过的改动,方便发现代码的变化

sudo apt-get install  git-doc
sudo  apt-get install git-core

把mysql代码加入到git里

cd mysql-source
git init
git add *.h
git add *.c
git add *.cc

安装cscope,方便快速切换。
具体的步骤见这篇文章
愿意的话可修改一下cscope.vim 文件里的nmap

nmap s :vert scs find s =expand("")
nmap g :vert scs find g =expand("")
nmap c :vert scs find c =expand("")
nmap t :vert scs find t =expand("")
nmap e :vert scs find e =expand("")
nmap f :vert scs find f =expand("")
nmap i :vert scs find i ^=expand("")$
nmap d :vert scs find d =expand("")

这样的好处就是ctrl+] 调到函数内部,ctrl+n+g 跳出垂直窗口显示代码

gdb调试会涉及到重复set args,我们可以利用gdb的macro-file来避免重复的输入。

涉及到多线程编程,为了让其他线程继续运行,需要设置
set scheduler-locking off

另外mysql对SIGINT设置了sigprocmask。启动mysqld时需设置参数–gdb

于是我们的macro-file就是

b main
r --user=mysql --gdb
set scheduler-locking off

开始debug

gdb mysqld -x macro-file

2 Comments

  1. [...] 是的msyqld_list_processes就是服务端处理show processlist 的函数。如果你配置好cscope和ctag,这里就可以很方便的快速切换进入这个函数。 [...]

  2. [...] 是的msyqld_list_processes就是服务端处理show processlist 的函数。如果你配置好cscope和ctag,这里就可以很方便的快速切换进入这个函数。 [...]

Leave a Reply