中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

windows系統vscode遠程調試mysql

發布時間:2020-08-10 14:57:00 來源:ITPUB博客 閱讀:657 作者:lox13 欄目:MySQL數據庫

準備工作

本文目標是可以從 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” 并安裝,安裝成功后左邊會有個電腦圖標

windows系統vscode遠程調試mysql

首先改設置, 左下角 管理(?) ->  設置, 搜 “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函數)

windows系統vscode遠程調試mysql

安裝一些需要的擴展, 如:

  • 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編譯后的啟動程序

之后就可以使用調試功能了, 添加斷點, 監視等等, 如圖:

windows系統vscode遠程調試mysql

圖示遠程 gdb 調試

在 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多塊很劃算想深入學習這塊的可以買下)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀仁县| 上林县| 堆龙德庆县| 济源市| 师宗县| 始兴县| 郸城县| 屏南县| 乌兰察布市| 基隆市| 思南县| 阿拉善左旗| 星座| 泰宁县| 新疆| 基隆市| 茌平县| 肥乡县| 灵川县| 西充县| 交城县| 溆浦县| 夏河县| 偏关县| 南丹县| 罗城| 景谷| 西宁市| 阿合奇县| 麦盖提县| 手游| 武强县| 大港区| 商都县| 外汇| 兰州市| 嘉黎县| 云阳县| 安溪县| 安平县| 镇巴县|