日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
MySQL 調(diào)試環(huán)境搭建:VSCode + Docker

近期使用 gdb 調(diào)試比較多,發(fā)現(xiàn)了很多好用的功能,而在 Mac 上使用 gdb 調(diào)試,體驗(yàn)不太順暢。

泰州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!

為此,基于 Docker 搭建了一套 CentOS 環(huán)境,結(jié)合 VSCode 和 gdb 來(lái)調(diào)試 MySQL,拿出來(lái)和大家分享。

本文基于 Mac + MySQL 8.0.32,對(duì)于在其它系統(tǒng)上搭建 MySQL 調(diào)試環(huán)境,安裝好 Docker Desktop 之后的步驟也是可以借鑒的。

1、下載 Docker Desktop

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

下載界面:

Docker Desktop 下載完成之后,安裝并運(yùn)行,然后就可以繼續(xù)接下來(lái)的步驟了。

2、創(chuàng)建 Docker 容器

先在 Docker Desktop 中設(shè)置能夠映射到容器中的宿主機(jī)目錄:

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

在宿主機(jī)執(zhí)行以下命令,創(chuàng)建容器并運(yùn)行:

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

# 創(chuàng)建容器
# 這個(gè) CentOS 容器專用于調(diào)試 MySQL
# 所以命名為【mysql】
# -d,表示以守護(hù)進(jìn)程方式運(yùn)行容器
# -t,表示需要打開(kāi)終端
# --name,容器名字
# -p,端口映射,格式【宿主機(jī)端口:容器端口】
# -v,目錄映射,格式【宿主機(jī)目錄:容器目錄】
# 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 宿主機(jī)上,連接容器中的 MySQL,需要指定 -p 選項(xiàng)做端口映射,然后通過(guò) 宿主機(jī) IP + 映射的宿主機(jī)端口連接容器中的 MySQL。

3、安裝 VSCode 擴(kuò)展

VSCode 擴(kuò)展包含兩部分:安裝在宿主機(jī)的擴(kuò)展、安裝在容器中的擴(kuò)展。

我們先打開(kāi) VSCode,安裝宿主機(jī) Docker 擴(kuò)展:

安裝 Docker 擴(kuò)展之后,我們就能在 VSCode? 中看到之前創(chuàng)建的 mysql 容器了:

點(diǎn)擊 Attach Visual Studio Code 會(huì)打開(kāi)一個(gè)新的 VSCode 窗口,我們給它取個(gè)名字:mysql 容器窗口,后面會(huì)用到。

接下來(lái),在 mysql 容器窗口安裝擴(kuò)展。

安裝 C/C++ 擴(kuò)展:

安裝 CMake Tools 擴(kuò)展:

4、準(zhǔn)備編譯

在宿主機(jī)執(zhí)行以下命令,進(jìn)入 mysql 容器:

docker exec -ti mysql /bin/bash

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

# 創(chuàng)建存放源碼的根目錄
mkdir -p /opt/data/code

# 進(jìn)入存放源碼的根目錄
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 環(huán)境臨時(shí)生效
source /opt/rh/devtoolset-11/enable

# 讓 scl 環(huán)境永久生效
yum install vim
vim /etc/profile.d/scl.sh

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

5、編譯

編譯過(guò)程按以下步驟進(jìn)行:

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

第 2 步,創(chuàng)建 .vscode 目錄:

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

settings.json 文件內(nèi)容如下:

{
"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 用于控制多少個(gè)線程同時(shí)進(jìn)行編譯,以加快編譯速度,默認(rèn)值為 0,CMake 會(huì)根據(jù) CPU 核數(shù)自行確定并發(fā)線程數(shù)。

如果編譯過(guò)程中報(bào)以下錯(cuò)誤,有兩種解決方案:

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

方案 1:把 cmake.parallelJobs 設(shè)置的小一點(diǎn),我在編譯過(guò)程中把并發(fā)數(shù)設(shè)置為 10 會(huì)報(bào)錯(cuò),后來(lái)改為 8 就能成功編譯了。

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

想要編譯的更快,可以把 cmake.parallelJobs 設(shè)置為 0,然后,在以上 Docker Desktop 界面中,把 CPU、Memory 兩項(xiàng)調(diào)大。

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

選擇編譯器:

如果 CMake:配置執(zhí)行過(guò)程中出現(xiàn)了錯(cuò)誤,解決錯(cuò)誤之后需要?jiǎng)h除 CMakeCache.txt,然后重新執(zhí)行 CMake:配置步驟。

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

第 5 步,編譯服務(wù)端可執(zhí)行程序 mysqld:

在輸入框中輸入“> CMake: 生成目標(biāo)”,選中第 2 個(gè)紅框中的選項(xiàng)。

接著會(huì)出現(xiàn)另一個(gè)輸入框,在其中輸入 mysqld,然后回車,就開(kāi)始編譯 mysqld 了。

第 6 步,編譯客戶端可執(zhí)行程序 mysql:
在輸入框中輸入“> CMake: 生成目標(biāo)”,選中第 2 個(gè)紅框中的選項(xiàng)。

接著會(huì)出現(xiàn)另一個(gè)輸入框,在其中輸入 mysql,然后回車,就開(kāi)始編譯 mysql 了。

6、初始化

接下來(lái),依然是在 mysql 容器中執(zhí)行以下命令:

# 創(chuàng)建配置文件目錄 & 數(shù)據(jù)目錄
mkdir -p /opt/data/8.0.32/{etc,data}

# 創(chuàng)建用戶 & 組
groupadd mysql
useradd -g mysql mysql

# 創(chuàng)建配置文件
vim /opt/data/8.0.32/etc/my.cnf

# 把以下內(nèi)容下入 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

# 初始化數(shù)據(jù)目錄
/opt/data/code/8.0.32/output/bin/mysqld --initialize-insecure

7、調(diào)試

經(jīng)過(guò)前面一系列操作之后,就可以開(kāi)始著手在 mysql 容器窗口中調(diào)試了。

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

launch.json 文件內(nèi)容如下:

{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 啟動(dòng)",
"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": "將反匯編風(fēng)格設(shè)置為 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}

第 2 步,啟動(dòng)調(diào)試,launch.json 文件配置完成之后,運(yùn)行和調(diào)試下拉框就能看到剛剛添加的配置,點(diǎn)擊 (gdb) 啟動(dòng)前面的小三角,啟動(dòng) MySQL,然后就可以開(kāi)始調(diào)試了。

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

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

第 4 步,連接 MySQL 成功之后,在 MySQL 源碼中打個(gè)斷點(diǎn),先打開(kāi) sql/sql_parse.cc 文件:

然后在 mysql_execute_command() 函數(shù)入口處打上斷點(diǎn):

第 5 步,執(zhí)行一條 SQL:

SELECT host, user FROM mysql.user;

程序在斷點(diǎn)處暫停之后,就可以查看一系列運(yùn)行時(shí)信息了,查看斷點(diǎn)所在函數(shù)的局部變量:

查看斷點(diǎn)處的調(diào)用棧:

也可以在調(diào)試控制臺(tái)中,用命令行執(zhí)行更多 gdb 命令:

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

8、總結(jié)

本文介紹了 VSCode + Docker + CentOS 7.9 搭建 MySQL 調(diào)試環(huán)境的完整流程。

本文轉(zhuǎn)載自微信公眾號(hào)「一樹(shù)一溪」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系一樹(shù)一溪公眾號(hào)。


網(wǎng)頁(yè)標(biāo)題:MySQL 調(diào)試環(huán)境搭建:VSCode + Docker
瀏覽地址:http://www.5511xx.com/article/dppggps.html