国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

windows系統vscode遠程調試mysql

2024-07-24 12:31:51
字體:
來源:轉載
供稿:網友
       準備工作
      本文目標是可以從 Windows  VSCode 環境遠程訪問 Linux 的 mysql源碼, 以及執行 GDB 遠程調試
 
     首先準備以下軟件
 
      在本地機器上:
 
      安裝  VS Code 目前最新版本支持 Remote - Development 插件
      安裝 VSCode 擴展 “Remote - Development”, 方法是左下角  管理(⚙) ->  擴展, 直接搜索商店
      安裝兼容 OpenSSH 的 SSH 客戶端, 我安裝的  Git for Windows
      在遠程機器上:
 
編譯安裝mysql(注意編譯時需開啟 -DWITH_DEBUG=1),并且啟動mysql實例,這里我是在centos(CentOS Linux release 7.7.1908)上面編譯安裝的mysql8.0.18(為方便沒有 mysql編譯安裝經驗的讀者回頭另寫一篇 mysql8.0.18編譯安裝)
安裝 gdb,   yum install gdb
安裝 gdbserver,  yum install gdb-gdbserver
啟動 ssh 服務端, 通常默認已經啟動
使用 VSCode 遠程訪問代碼
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 也變成了該遠程連接的專屬實例, windows系統vscode遠程調試mysql
 
圖示通過 SSH 連接遠程linux機器成功后
然后就可以從側邊欄打開項目路徑了, 點擊左邊的資源管理器,點擊打開文件夾,在下圖藍框處輸入mysql源碼路徑(注意不是編譯后的運行程序路徑是源碼解壓路徑,我的環境源碼路徑為/home/mysql/rpmbuild/SOURCES/mysql-8.0.18,這里我還向下選擇sql目錄,因為mysql的大多數核心代碼在該目錄下,如main函數)
 
安裝一些需要的擴展, 如:
 
C/C++ IntelliSense, debugging, and code browsing
有些擴展是要安裝在 SSH 的目標機器上, 安裝時會提示你  install on SSH: xxxx, 而主題類擴展和一部分功能類擴展是安裝在本地機器上
 
使用 VSCode 和 gdbserver 遠程調試 mysql 代碼
在遠程 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/>".

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 两当县| 大悟县| 榆中县| 陕西省| 合肥市| 枞阳县| 同心县| 五莲县| 南皮县| 宜昌市| 五莲县| 焦作市| 甘肃省| 洞头县| 沙洋县| 噶尔县| 定日县| 探索| 双柏县| 若尔盖县| 特克斯县| 荥阳市| 河源市| 木兰县| 永城市| 库尔勒市| 射洪县| 固安县| 兴海县| 灵寿县| 吉首市| 洛浦县| 荣昌县| 永仁县| 张掖市| 乌拉特前旗| 德钦县| 莫力| 娄底市| 福建省| 旬邑县|