溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

windows系統(tǒng)vscode遠(yuǎn)程調(diào)試mysql

發(fā)布時(shí)間:2020-08-10 14:57:00 來(lái)源:ITPUB博客 閱讀:657 作者:lox13 欄目:MySQL數(shù)據(jù)庫(kù)

準(zhǔn)備工作

本文目標(biāo)是可以從 Windows  VSCode 環(huán)境遠(yuǎn)程訪問(wèn) Linux 的 mysql源碼, 以及執(zhí)行 GDB 遠(yuǎn)程調(diào)試

首先準(zhǔn)備以下軟件

在本地機(jī)器上:

  • 安裝  VS Code 目前最新版本支持 Remote - Development 插件
  • 安裝 VSCode 擴(kuò)展 “Remote - Development”, 方法是左下角  管理(?) ->  擴(kuò)展, 直接搜索商店
  • 安裝兼容 OpenSSH 的 SSH 客戶端, 我安裝的  Git for Windows 

在遠(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

  • 安裝 gdbserver,  yum install gdb-gdbserver
  • 啟動(dòng) ssh 服務(wù)端, 通常默認(rèn)已經(jīng)啟動(dòng)

使用 VSCode 遠(yuǎn)程訪問(wèn)代碼

VSCode主界面 查看  ->  擴(kuò)展 搜索 “Remote - Development” 并安裝,安裝成功后左邊會(huì)有個(gè)電腦圖標(biāo)

windows系統(tǒng)vscode遠(yuǎn)程調(diào)試mysql

首先改設(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í)例, windows系統(tǒng)vscode遠(yuǎn)程調(diào)試mysql

圖示通過(guò) SSH 連接遠(yuǎn)程linux機(jī)器成功后


然后就可以從側(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ù))

windows系統(tǒng)vscode遠(yuǎn)程調(diào)試mysql

安裝一些需要的擴(kuò)展, 如:

  • C/C++ IntelliSense, debugging, and code browsing

有些擴(kuò)展是要安裝在 SSH 的目標(biāo)機(jī)器上, 安裝時(shí)會(huì)提示你  install on SSH: xxxx, 而主題類(lèi)擴(kuò)展和一部分功能類(lèi)擴(kuò)展是安裝在本地機(jī)器上

使用 VSCode 和 gdbserver 遠(yuǎn)程調(diào)試 mysql 代碼

在遠(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è)注意的地方:

  • 應(yīng)該是  "request": "launch", 不是 “attach”, 此后也并不需要記錄進(jìn)程ID
  • 需要填對(duì)  "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)視等等, 如圖:

windows系統(tǒng)vscode遠(yuǎn)程調(diào)試mysql

圖示遠(yuǎn)程 gdb 調(diào)試

在 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)下)

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI