您好,登錄后才能下訂單哦!
本文目標是可以從 Windows VSCode 環境遠程訪問 Linux 的 mysql源碼, 以及執行 GDB 遠程調試
首先準備以下軟件
在本地機器上:
管理(?)
->
擴展
, 直接搜索商店在遠程機器上:
編譯安裝mysql(注意編譯時需開啟 -DWITH_DEBUG=1),并且啟動mysql實例,這里我是在centos(CentOS Linux release 7.7.1908)上面編譯安裝的mysql8.0.18(為方便沒有 mysql編譯安裝經驗的讀者回頭另寫一篇 mysql8.0.18編譯安裝)
安裝 gdb,
yum install gdb
yum install gdb-gdbserver
VSCode主界面
查看
->
擴展
搜索 “Remote - Development” 并安裝,安裝成功后左邊會有個電腦圖標
首先改設置, 左下角
管理(?)
->
設置
, 搜 “remote.SSH”, 勾選
remote.SSH.showLoginTerminal
完后就可以連接到遠程機器了, 為避免頻繁輸入密碼建議使用免密ssh登錄
首先生成密鑰:
# 生成一對密鑰, 文件名寫vscode_rsa ssh-keygen -t rsa # 公鑰需要放到 Linux 執行環境里 # 公鑰為 "vscode_rsa.pub" cat /root/.ssh/vscode_rsa.pub >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys # 私鑰放在 VSCode 一端 Windows 機器里 # 我的路徑是 "D:/dba/vscode_rsa"
然后在 VSCode 主界面
ctrl+shift+p
選
Remote.SSH: Open Configuration File
, 輸入以下內容:
Host vm-mysql <- 連接標識, 隨便寫 HostName 192.168.126.128 <- 遠程機器 IP(我寫的裝載centos的虛機ip) User root IdentityFile D:/dba/vscode_rsa <- 私鑰的本地完整路徑
在 VSCode 主界面
ctrl+shift+p
選
Remote.SSH: Connect to host
, 輸入
root@<ip>
, 成功后界面左下角會有
SSH: <ip>
的已連接狀態, 同時這個 VSCode 也變成了該遠程連接的專屬實例,
然后就可以從側邊欄打開項目路徑了, 點擊左邊的資源管理器,點擊打開文件夾,在下圖藍框處輸入mysql源碼路徑(注意不是編譯后的運行程序路徑是源碼解壓路徑,我的環境源碼路徑為/home/mysql/rpmbuild/SOURCES/mysql-8.0.18,這里我還向下選擇sql目錄,因為mysql的大多數核心代碼在該目錄下,如main函數)
安裝一些需要的擴展, 如:
有些擴展是要安裝在 SSH 的目標機器上, 安裝時會提示你
install on SSH: xxxx
, 而主題類擴展和一部分功能類擴展是安裝在本地機器上
在遠程 Linux 機器上運行如下代碼:
gdbserver localhost:2333 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql
(注意這個代碼我執行成功了,后面的mysql參數是我根據參考文章猜測寫的,這里是指定了mysql配置文件以及啟動用戶和mysql實例啟動時的一致,沒有仔細查閱gdbserver命令行用法,歡迎指正。順便貼下我mysql的啟動命令方便讀者佐證, /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql )
我vm虛機遠程 Linux 機器 IP 是
192.168.126.128
, gdbserver 的端口設為
2333
, 在 VSCode 機器上, 進入菜單
調試
->
添加配置
, 會生成一個配置文件
SSH之后的項目根目錄/.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}", } ] }
幾個注意的地方:
"request": "launch"
, 不是 “attach”, 此后也并不需要記錄進程ID"miDebuggerServerAddress": "192.168.126.128:2333"
, 有這個設置才會開啟 gdb 遠程調試"engineLogging": true
可以看到 gdb 自身的詳細消息"externalConsole": false
否則報錯/usr/local/mysql/bin/mysqld
在 gdbserver 和 launch.json 里都要填一次,即mysql編譯后的啟動程序之后就可以使用調試功能了, 添加斷點, 監視等等, 如圖:
在 VSCode 的調試控制臺輸入變量名, 就可以直接打印出來, 想使用默認的調試器命令要在前面加
-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 遠程訪問代碼以及遠程 GDB 調試
線程簡介和MySQL調試環境搭建(這篇是八怪在知數堂發布的 深入理解mysql主從原理的29講 一個收費課程,30多塊很劃算想深入學習這塊的可以買下)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。