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.?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 「雙城記」
在應(yīng)用層面工作的工程師在談?wù)摰組ySQL的時(shí)候术徊,經(jīng)常有一種熟悉又陌生的感覺(jué)直秆。提到索引(B+樹(shù)/Cardinality/主鍵索引/二級(jí)索引/聯(lián)合索引)芹扭,鎖(lock/latch/記錄鎖/阻塞/死鎖)和事務(wù)(redo/undo/事務(wù)隔離/分布式事務(wù))等諸多概念的時(shí)候會(huì)覺(jué)得每個(gè)概念都在書(shū)中或者別人的博客里面讀過(guò)原理御板,但具體到用代碼如何實(shí)現(xiàn),又往往感到無(wú)法深入单寂。解決這個(gè)問(wèn)題系吩,我們需要經(jīng)歷信息的知識(shí)化過(guò)程,如下圖靠益。(當(dāng)然后面還有一個(gè)大智慧化的過(guò)程啊哈哈哈哈)
對(duì)于復(fù)雜的代碼工程丧肴,我們知識(shí)化信息的手段當(dāng)然是RTFSC(Read the Fucking Source Code:-)。當(dāng)然源代碼的含義不僅僅是一堆字符本身胧后,它代表了背后的設(shè)計(jì)芋浮,算法和性能等諸多考慮。
這篇文章主要step-by-step介紹如何在mac上用Xcode來(lái)調(diào)試MySQL源代碼壳快。
我們需要準(zhǔn)備的工具如下:
1. Xcode纸巷。AppStore上面搜索 Xcode,然后下載安裝即可眶痰。整個(gè)過(guò)程耗時(shí)略長(zhǎng)瘤旨。
2. GDB。brew install GDB 即可竖伯。
3. Cmake存哲。MySQL的編譯是采用的Cmake 因宇,官網(wǎng)直接下載安裝即可。
4. MySQL源代碼祟偷。推薦推薦Percona 版本或者M(jìn)ariadb羽嫡。Percona?或者?Mariadb。
以percona-server-5.6.24為例肩袍。Cmake的-G “Xcode”選項(xiàng)會(huì)生成Xcode的工程文件杭棵。
Cmake 之后,會(huì)生成一個(gè)xcodeproj的工程文件氛赐,使用xcode 打開(kāi)就可以把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之后,直接點(diǎn)擊xcode的編譯按鈕就可以進(jìn)行編譯和build了艰管,等完成之后會(huì)生成對(duì)應(yīng)的二進(jìn)制可執(zhí)行文件滓侍。這個(gè)過(guò)程其實(shí)就是手工執(zhí)行 make && make install的過(guò)程。但是 編譯完成需要自己手工進(jìn)行可執(zhí)行文件的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撩笆,添加啟動(dòng)變量和env變量。
然后運(yùn)行mysqld缸浦。這時(shí)候就可以用mysql命令連到數(shù)據(jù)庫(kù)上執(zhí)行SQL語(yǔ)句了夕冲。
然后就可以隨心所欲,設(shè)置斷點(diǎn)裂逐,查看內(nèi)存歹鱼,網(wǎng)絡(luò),cpu卜高,變量等各種信息啦弥姻。
ENJOY