您好,登錄后才能下訂單哦!
本文目標(biāo)是可以從 Windows VSCode 環(huán)境遠(yuǎn)程訪問(wèn) Linux 的 mysql源碼, 以及執(zhí)行 GDB 遠(yuǎn)程調(diào)試
首先準(zhǔn)備以下軟件
在本地機(jī)器上:
管理(?)
->
擴(kuò)展
, 直接搜索商店在遠(yuǎn)程機(jī)器上:
編譯安裝mysql(注意編譯時(shí)需開(kāi)啟 -DWITH_DEBUG=1),并且啟動(dòng)mysql實(shí)例,這里我是在centos(CentOS Linux release 7.7.1908)上面編譯安裝的mysql8.0.18(為方便沒(méi)有 mysql編譯安裝經(jīng)驗(yàn)的讀者回頭另寫(xiě)一篇 mysql8.0.18編譯安裝)
安裝 gdb,
yum install gdb
yum install gdb-gdbserver
VSCode主界面
查看
->
擴(kuò)展
搜索 “Remote - Development” 并安裝,安裝成功后左邊會(huì)有個(gè)電腦圖標(biāo)
首先改設(shè)置, 左下角
管理(?)
->
設(shè)置
, 搜 “remote.SSH”, 勾選
remote.SSH.showLoginTerminal
完后就可以連接到遠(yuǎn)程機(jī)器了, 為避免頻繁輸入密碼建議使用免密ssh登錄
首先生成密鑰:
# 生成一對(duì)密鑰, 文件名寫(xiě)vscode_rsa ssh-keygen -t rsa # 公鑰需要放到 Linux 執(zhí)行環(huán)境里 # 公鑰為 "vscode_rsa.pub" cat /root/.ssh/vscode_rsa.pub >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys # 私鑰放在 VSCode 一端 Windows 機(jī)器里 # 我的路徑是 "D:/dba/vscode_rsa"
然后在 VSCode 主界面
ctrl+shift+p
選
Remote.SSH: Open Configuration File
, 輸入以下內(nèi)容:
Host vm-mysql <- 連接標(biāo)識(shí), 隨便寫(xiě) HostName 192.168.126.128 <- 遠(yuǎn)程機(jī)器 IP(我寫(xiě)的裝載centos的虛機(jī)ip) User root IdentityFile D:/dba/vscode_rsa <- 私鑰的本地完整路徑
在 VSCode 主界面
ctrl+shift+p
選
Remote.SSH: Connect to host
, 輸入
root@<ip>
, 成功后界面左下角會(huì)有
SSH: <ip>
的已連接狀態(tài), 同時(shí)這個(gè) VSCode 也變成了該遠(yuǎn)程連接的專(zhuān)屬實(shí)例,
然后就可以從側(cè)邊欄打開(kāi)項(xiàng)目路徑了, 點(diǎn)擊左邊的資源管理器,點(diǎn)擊打開(kāi)文件夾,在下圖藍(lán)框處輸入mysql源碼路徑(注意不是編譯后的運(yùn)行程序路徑是源碼解壓路徑,我的環(huán)境源碼路徑為/home/mysql/rpmbuild/SOURCES/mysql-8.0.18,這里我還向下選擇sql目錄,因?yàn)閙ysql的大多數(shù)核心代碼在該目錄下,如main函數(shù))
安裝一些需要的擴(kuò)展, 如:
有些擴(kuò)展是要安裝在 SSH 的目標(biāo)機(jī)器上, 安裝時(shí)會(huì)提示你
install on SSH: xxxx
, 而主題類(lèi)擴(kuò)展和一部分功能類(lèi)擴(kuò)展是安裝在本地機(jī)器上
在遠(yuǎn)程 Linux 機(jī)器上運(yùn)行如下代碼:
gdbserver localhost:2333 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql
(注意這個(gè)代碼我執(zhí)行成功了,后面的mysql參數(shù)是我根據(jù)參考文章猜測(cè)寫(xiě)的,這里是指定了mysql配置文件以及啟動(dòng)用戶和mysql實(shí)例啟動(dòng)時(shí)的一致,沒(méi)有仔細(xì)查閱gdbserver命令行用法,歡迎指正。順便貼下我mysql的啟動(dòng)命令方便讀者佐證, /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql )
我vm虛機(jī)遠(yuǎn)程 Linux 機(jī)器 IP 是
192.168.126.128
, gdbserver 的端口設(shè)為
2333
, 在 VSCode 機(jī)器上, 進(jìn)入菜單
調(diào)試
->
添加配置
, 會(huì)生成一個(gè)配置文件
SSH之后的項(xiàng)目根目錄/.vscode/launch.json
, 將其修改如下:
{ "version": "0.2.0", "configurations": [ { "name": "gdb Remote Launch", "type": "cppdbg", "request": "launch", "program": "/usr/local/mysql/bin/mysqld", "stopAtEntry": true, "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "gdb", "miDebuggerArgs": "gdb", "linux": { "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerServerAddress": "192.168.126.128:2333", }, "logging": { "moduleLoad": false, "engineLogging": false, "trace": false }, "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "cwd": "${workspaceFolder}", } ] }
幾個(gè)注意的地方:
"request": "launch"
, 不是 “attach”, 此后也并不需要記錄進(jìn)程ID"miDebuggerServerAddress": "192.168.126.128:2333"
, 有這個(gè)設(shè)置才會(huì)開(kāi)啟 gdb 遠(yuǎn)程調(diào)試"engineLogging": true
可以看到 gdb 自身的詳細(xì)消息"externalConsole": false
否則報(bào)錯(cuò)/usr/local/mysql/bin/mysqld
在 gdbserver 和 launch.json 里都要填一次,即mysql編譯后的啟動(dòng)程序之后就可以使用調(diào)試功能了, 添加斷點(diǎn), 監(jiān)視等等, 如圖:
在 VSCode 的調(diào)試控制臺(tái)輸入變量名, 就可以直接打印出來(lái), 想使用默認(rèn)的調(diào)試器命令要在前面加
-exec
, 如
-exec p/x args
附 gdbserver usage
gdbserver --help Usage: gdbserver [OPTIONS] COMM PROG [ARGS ...] gdbserver [OPTIONS] --attach COMM PID gdbserver [OPTIONS] --multi COMM COMM may either be a tty device (for serial debugging), or HOST:PORT to listen for a TCP connection. Options: --debug Enable general debugging output. --remote-debug Enable remote protocol debugging output. --version Display version information and exit. --wrapper WRAPPER -- Run WRAPPER to start new programs. --once Exit after the first connection has closed. Report bugs to "<http://www.gnu.org/software/gdb/bugs/>".
使用 VSCode 遠(yuǎn)程訪問(wèn)代碼以及遠(yuǎn)程 GDB 調(diào)試
線程簡(jiǎn)介和MySQL調(diào)試環(huán)境搭建(這篇是八怪在知數(shù)堂發(fā)布的 深入理解mysql主從原理的29講 一個(gè)收費(fèi)課程,30多塊很劃算想深入學(xué)習(xí)這塊的可以買(mǎi)下)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。