日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了 VSCode + Docker + centos 7.9 搭建 MySQL 調試環境的完整流程。

近期使用 gdb 調試比較多,發現了很多好用的功能,而在 mac 上使用 gdb 調試,體驗不太順暢。

為此,基于 Docker 搭建了一套 CentOS 環境,結合 VSCode 和 gdb 來調試 MySQL,拿出來和大家分享。

本文基于 Mac + MySQL 8.0.32,對于在其它系統上搭建 MySQL 調試環境,安裝好 Docker Desktop 之后的步驟也是可以借鑒的。

1、下載 Docker Desktop

下載地址:https://www.docker.com/products/docker-desktop

下載界面:

圖片

Docker Desktop 下載完成之后,安裝并運行,然后就可以繼續接下來的步驟了。

2、創建 Docker 容器

先在 Docker Desktop 中設置能夠映射到容器中的宿主機目錄:

圖片

在第 3 個紅框處的輸入框?中,輸入 /opt/data/docker?,然后按回車鍵?把目錄加入 FILE SHARING?,表示允許把宿主機中該目錄及其子目錄映射到容器中,最后點擊第 4 個紅框處的 Apply & Restart?,應用并重啟 Docker Desktop,讓修改生效。

在宿主機執行以下命令,創建容器并運行:

 
# 獲取 CentOS 7.9 鏡像
docker pull centos:centos7.9.2009

# 創建容器
# 這個 CentOS 容器專用于調試 MySQL
# 所以命名為【mysql】
# -d,表示以守護進程方式運行容器
# -t,表示需要打開終端
# --name,容器名字
# -p,端口映射,格式【宿主機端口:容器端口】
# -v,目錄映射,格式【宿主機目錄:容器目錄】
# centos:centos7.9.2009,鏡像
docker run 
  --name mysql 
  -p 3306-3310:3306-3310 
  -v /opt/data/docker/centos79_mysql:/opt/data 
  --privileged -dt 
  centos:centos7.9.2009

在 Mac 宿主機上,連接容器中的 MySQL,需要指定 -p 選項做端口映射,然后通過 宿主機 IP + 映射的宿主機端口連接容器中的 MySQL。

3、安裝 VSCode 擴展

VSCode 擴展包含兩部分:安裝在宿主機的擴展、安裝在容器中的擴展。

我們先打開 VSCode,安裝宿主機 Docker 擴展:

圖片

安裝 Docker 擴展之后,我們就能在 VSCode? 中看到之前創建的 mysql 容器了:

圖片

點擊 Attach Visual Studio Code 會打開一個新的 VSCode 窗口,我們給它取個名字:mysql 容器窗口,后面會用到。

接下來,在 mysql 容器窗口安裝擴展。

安裝 C/C++ 擴展:

圖片

圖片

安裝 CMake Tools 擴展:

圖片

圖片

4、準備編譯

在宿主機執行以下命令,進入 mysql 容器:

docker exec -ti mysql /bin/bash

在 mysql 容器中執行以下命令,下載源碼、安裝依賴軟件:

 
# 創建存放源碼的根目錄
mkdir -p /opt/data/code

# 進入存放源碼的根目錄
cd /opt/data/code

# 安裝 wget、下載源碼 & 解壓
yum install wget
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.32.tar.gz
tar zxvf mysql-boost-8.0.32.tar.gz

# 修改源碼目錄名
mv mysql-8.0.32 8.0.32

# 用于安裝 cmake3 的 yum 源
yum -y install epel-release

# 用于安裝高版本 gcc、gcc-c++、make 的 yum 源
yum -y install centos-release-scl

# 安裝依賴軟件
yum install devtoolset-11-gcc 
  devtoolset-11-gcc-c++ 
  devtoolset-11-make 
  cmake3 
  openssl-devel 
  ncurses-devel 
  bison

# 安裝 gdb
yum install devtoolset-11-gdb

# 讓 scl 環境臨時生效
source /opt/rh/devtoolset-11/enable

# 讓 scl 環境永久生效
yum install vim
vim /etc/profile.d/scl.sh

# 把以下內容寫入 scl.sh,然后保存退出
source /opt/rh/devtoolset-11/enable

5、編譯

編譯過程按以下步驟進行:

第 1 步,在 mysql 容器窗口中打開剛下載的 MySQL 源碼目錄:

圖片

第 2 步,創建 .vscode 目錄:

圖片

第 3 步,新建 CMake 配置文件 settings.json:

圖片

settings.json 文件內容如下:

 
{
  "cmake.buildBeforeRun": true,
  "cmake.buildDirectory": "${workspaceFolder}/output",
  "cmake.configureSettings": {
    "WITH_DEBUG": "1",
    "CMAKE_INSTALL_PREFIX": "${workspaceFolder}/output",
    "MYSQL_DATADIR": "/opt/data/8.0.32/data",
    "SYSCONFDIR": "/opt/data/8.0.32/etc",
    "MYSQL_TCP_PORT": "3306",
    "MYSQL_UNIX_ADDR": "/opt/data/8.0.32/data/mysql-debug.sock",
    "WITH_BOOST": "${workspaceFolder}/boost",
    "DOWNLOAD_BOOST": "0"
  },
  "files.associations": {
    "*.ipp": "cpp"
  },
  "cmake.parallelJobs": 8,
  "cmake.cmakePath": "cmake3"
}

cmake.parallelJobs 用于控制多少個線程同時進行編譯,以加快編譯速度,默認值為 0,CMake 會根據 CPU 核數自行確定并發線程數。

如果編譯過程中報以下錯誤,有兩種解決方案:

c++: internal compiler error: Killed (program cc1plus)

方案 1:把 cmake.parallelJobs 設置的小一點,我在編譯過程中把并發數設置為 10 會報錯,后來改為 8 就能成功編譯了。

方案 2:?在 Docker Desktop 中調整容器能夠使用的資源,如下:

圖片

想要編譯的更快,可以把 cmake.parallelJobs 設置為 0,然后,在以上 Docker Desktop 界面中,把 CPU、Memory 兩項調大。

第 4 步,CMake 配置?,生成 Makefile 文件:在 ?mysql 容器窗口?頂部的輸入框中,輸入 > CMake: 配置?,然后選擇下面列出來的 CMake 配置,開始生成 Makefile 文件。

圖片

選擇編譯器:

圖片

如果 CMake:配置執行過程中出現了錯誤,解決錯誤之后需要刪除 CMakeCache.txt,然后重新執行 CMake:配置步驟。

CMakeCache.txt 文件路徑為 /opt/data/code/8.0.32/output/CMakeCache.txt。

第 5 步,編譯服務端可執行程序 mysqld:

在輸入框中輸入“> CMake: 生成目標”,選中第 2 個紅框中的選項。

圖片

接著會出現另一個輸入框,在其中輸入 mysqld,然后回車,就開始編譯 mysqld 了。

圖片

第 6 步,編譯客戶端可執行程序 mysql:
在輸入框中輸入“> CMake: 生成目標”,選中第 2 個紅框中的選項。

圖片

接著會出現另一個輸入框,在其中輸入 mysql,然后回車,就開始編譯 mysql 了。

圖片

6、初始化

接下來,依然是在 mysql 容器中執行以下命令:

 
# 創建配置文件目錄 & 數據目錄
mkdir -p /opt/data/8.0.32/{etc,data}

# 創建用戶 & 組
groupadd mysql
useradd -g mysql mysql

# 創建配置文件
vim /opt/data/8.0.32/etc/my.cnf

# 把以下內容下入 my.cnf
[mysqld]
user=mysql
innodb_file_per_table=1
server_id=100
log_bin=ON
lc-messages-dir=/opt/data/code/8.0.32/output/share
log-error=/opt/data/8.0.32/error.log

# 初始化數據目錄
/opt/data/code/8.0.32/output/bin/mysqld --initialize-insecure

7、調試

經過前面一系列操作之后,就可以開始著手在 mysql 容器窗口中調試了。

第 1 步,新建配置文件 launch.json:

圖片

launch.json 文件內容如下:

 
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(gdb) 啟動",
      "type": "cppdbg",
      "request": "launch",
      "program": "/opt/data/code/8.0.32/output/bin/mysqld",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "為 gdb 啟用整齊打印",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "將反匯編風格設置為 Intel",
          "text": "-gdb-set disassembly-flavor intel",
          "ignoreFailures": true
        }
      ]
    }
  ]
}

第 2 步,啟動調試,launch.json 文件配置完成之后,運行和調試下拉框就能看到剛剛添加的配置,點擊 (gdb) 啟動前面的小三角,啟動 MySQL,然后就可以開始調試了。

圖片

第 3 步,在 mysql 容器的命令行中,通過前面編譯的客戶端可執行程序 mysql,連接 MySQL:

cd /opt/data/code/8.0.32/output/bin
./mysql -h127.0.0.1 -uroot

第 4 步,連接 MySQL 成功之后,在 MySQL 源碼中打個斷點,先打開 sql/sql_parse.cc 文件:

圖片

然后在 mysql_execute_command() 函數入口處打上斷點:

圖片

第 5 步,執行一條 SQL:

SELECT host, user FROM mysql.user;

程序在斷點處暫停之后,就可以查看一系列運行時信息了,查看斷點所在函數的局部變量:

圖片

查看斷點處的調用棧:

圖片

也可以在調試控制臺中,用命令行執行更多 gdb 命令:

圖片

VSCode + Docker 調試,需要在命令之前加上 -exec,上圖中命令 p thd->m_query_string 前面就加上了 -exec。

8、總結

本文介紹了 VSCode + Docker + CentOS 7.9 搭建 MySQL 調試環境的完整流程。

本文轉載自微信公眾號「一樹一溪」,可以通過以下二維碼關注。

分享到:
標簽:MySQL
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定