做者:洪斌html
簡介
MySQL調試是探索MySQL源碼的基本技能,以前介紹過如何使用LLDB調試MySQL,但命令行操做不便,在編輯器和終端之間來回切換,查看代碼不便,本文將介紹在Mac OS中如何使用VS Code進行本地和遠程調試,能夠大大的提升調試效率。python
Visual Studio Code
Visual Studio Code(簡稱VS Code)是由微軟開發的,同時支持Windows、Linux和macOS操做系統的開源文本編輯器。它支持調試,內置了Git 版本控制功能,同時也具備開發環境功能,例如代碼補全(相似於IntelliSense)、代碼片斷、代碼重構等。該編輯器支持用戶自定義配置,例如改變主題顏色、鍵盤快捷方式、編輯器屬性和其餘參數,還支持擴展程序並在編輯器中內置了擴展程序管理的功能。mysql
安裝LLDB
LLDB是LLVM編譯器的一部分,推薦使用Homebrew安裝LLVM工具集,不建議使用系統自帶的LLDB,安裝前必須先建立證書不然沒法安裝,步驟以下:
linux
建立完成後,開始安裝LLVM
brew install llvm --with-python@2 --with-lldbgit
安裝插件
VS Code自帶有debug功能,這裏我推薦使用LLDB Debugger插件。
github
接下來,爲項目配置調試參數。sql
配置調試參數
使用VS Code打開MySQL源碼目錄,在側邊欄選擇debug欄目,添加配置,program輸入須要調試的程序路徑,這裏選擇你編譯好的mysqld路徑,args輸入程序啓動所需的參數,一般會指定mysqld的配置文件。這樣就配置好了,是否是很簡單。
centos
啓動調試
點擊啓動按鈕,啓動後若是沒有設置斷點會mysqld會正常啓動,若是觸發了斷點會以下圖顯示。
服務器
整個調試窗口基本分爲六部分,全部的調試操做都在這裏完成:
1: 顯示變量信息
2: 設置重點關注的變量
3: 顯示調用棧信息
4: 設置斷點信息,在代碼行號前也能夠設置斷點
5: 代碼顯示區域,上方是調試按鈕,包括 continue/stepover/step in/step out/restart/stop
6: 調試終端輸入輸出區編輯器
斷點設置
在代碼行號前點擊便可在該行爲設置斷點,也能夠根據條件設置斷點。以設置ConditionalBreakpoint爲例,當程序啓動後會按照你設置的條件表達式判斷是否觸發斷點。
Conditional Breakpoint這種方式用在目標變量達到某條件時觸發斷點,其他則跳過繼續執行。好比:設置變量等於目標表名時觸發斷點,其他表則跳過,相對函數名斷點省去不少手工跳過操做。
遠程調試
假如你想調試遠程Linux服務器上的MySQL上面的方法就不合適了,這時須要遠程調試。lldb和gdb都支持遠程調試,這裏以lldb爲例。
須要先在遠程主機上安裝lldb,使用yum安裝,源地址在這裏http://mirror.centos.org/cent...
remote$ yum install -y llvm-toolset-7
安裝完成後,啓動lldb-server
remote$ /opt/rh/llvm-toolset-7/root/usr/bin/lldb-serverplatform --listen "*:9191" --server
接下來,在VS Code調試界面中新增配置項。
{
"type": "lldb",
"request": "attach",
"name": "Remote attach",
"program": "~/mysql5626/usr/local/mysql/bin/mysqld",
"pid":"<target_pid>",
"initCommands": [
"platform select remote-linux", "platform connect connect://<remote_host>:9191"
],
"sourceMap": {
"/export/home/pb2/build/sb_0-15908961-1436910670.17/mysql-5.6.26": "/Users/hongbin/workbench/mysql-server"
}
},
program: 本機也要拷貝一份目標程序,加載
pid: 填寫遠程主機的mysqld進程id
sourceMap: 填寫mysqld編譯的代碼路徑與本機代碼庫路徑的映射,這樣調試時代碼才能夠和程序關聯在一塊兒看
注意:記得調試前將代碼切換到與目標程序版本一致的branch
參考
http://lldb.llvm.org/remote.html
https://github.com/vadimcn/vs...