It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way.
-- 「双城记」
在应用层面工作的工程师在谈论到MySQL的时候,经常有一种熟悉又陌生的感觉。提到索引(B+树/Cardinality/主键索引/二级索引/联合索引),锁(lock/latch/记录锁/阻塞/死锁)和事务(redo/undo/事务隔离/分布式事务)等诸多概念的时候会觉得每个概念都在书中或者别人的博客里面读过原理,但具体到用代码如何实现,又往往感到无法深入。解决这个问题,我们需要经历信息的知识化过程,如下图。(当然后面还有一个大智慧化的过程啊哈哈哈哈)
对于复杂的代码工程,我们知识化信息的手段当然是RTFSC(Read the Fucking Source Code:-)。当然源代码的含义不仅仅是一堆字符本身,它代表了背后的设计,算法和性能等诸多考虑。
这篇文章主要step-by-step介绍如何在mac上用Xcode来调试MySQL源代码。
我们需要准备的工具如下:
1. Xcode。AppStore上面搜索 Xcode,然后下载安装即可。整个过程耗时略长。
2. GDB。brew install GDB 即可。
3. Cmake。MySQL的编译是采用的Cmake ,官网直接下载安装即可。
4. MySQL源代码。推荐推荐Percona 版本或者Mariadb。Percona 或者 Mariadb。
以percona-server-5.6.24为例。Cmake的-G “Xcode”选项会生成Xcode的工程文件。
Cmake 之后,会生成一个xcodeproj的工程文件,使用xcode 打开就可以把mysql工程加入到 xcode了。
cd percona-server-5.6.24 && mkdir work && cmake . -G"Xcode"-DWITH_DEBUG=1-DWITH_TOKUDB_STORAGE_ENGINE=OFF-DWITHOUT_TOKUDB_STORAGE_ENGINE=ON-DCMAKE_INSTALL_PREFIX=/path-to/percona-server-5.6.24/work
在加入了Xcode之后,直接点击xcode的编译按钮就可以进行编译和build了,等完成之后会生成对应的二进制可执行文件。这个过程其实就是手工执行 make && make install的过程。但是 编译完成需要自己手工进行可执行文件的copy工作。
cd work ; mkdir {bin,share,scripts,data} && cp sql/Debug/mysqld work/bin/ && cp client/Debug/mysql* work/bin/ && cp extra/Debug/my_print_defaults work/bin/ && cp -r sql/share/* work/share/ && cp -r scripts/* work/scripts/ && chmod +x work/scripts/* && cp scripts/*.sql work/share/ && cp support-files/*.cnf work/share/
编辑mysqld的scheme,添加启动变量和env变量。
然后运行mysqld。这时候就可以用mysql命令连到数据库上执行SQL语句了。
然后就可以随心所欲,设置断点,查看内存,网络,cpu,变量等各种信息啦。
ENJOY