国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL 調(diào)試環(huán)境搭建:VSCode + Docker

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

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

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

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

1、下載 Docker Desktop

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

下載界面:

圖片

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

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

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

圖片

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

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

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

# 創(chuàng)建容器
# 這個 CentOS 容器專用于調(diào)試 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? 中看到之前創(chuàng)建的 mysql 容器了:

圖片

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

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

安裝 C/C++ 擴展:

圖片

圖片

安裝 CMake Tools 擴展:

圖片

圖片

4、準備編譯

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

docker exec -ti mysql /bin/bash

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

# 創(chuàng)建存放源碼的根目錄
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 環(huán)境臨時生效
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、編譯

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

第 1 步,在 mysql 容器窗口中打開剛下載的 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 用于控制多少個線程同時進行編譯,以加快編譯速度,默認值為 0,CMake 會根據(jù) CPU 核數(shù)自行確定并發(fā)線程數(shù)。

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

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

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

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

圖片

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

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

圖片

選擇編譯器:

圖片

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

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

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

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

圖片

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

圖片

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

圖片

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

圖片

6、初始化

接下來,依然是在 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)過前面一系列操作之后,就可以開始著手在 mysql 容器窗口中調(diào)試了。

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

圖片

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

{
"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": "將反匯編風格設(shè)置為 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}

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

圖片

第 3 步,在 mysql 容器的命令行中,通過前面編譯的客戶端可執(zhí)行程序 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() 函數(shù)入口處打上斷點:

圖片

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

SELECT host, user FROM mysql.user;

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

圖片

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

圖片

也可以在調(diào)試控制臺中,用命令行執(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)載自微信公眾號「一樹一溪」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系一樹一溪公眾號。

責任編輯:姜華 來源: 一樹一溪
相關(guān)推薦

2023-09-13 07:30:36

ADManager漏洞調(diào)試

2009-12-18 11:14:52

VS 2010環(huán)境

2025-05-26 08:05:00

Nacos源碼開發(fā)

2023-07-31 07:15:09

漏洞調(diào)試環(huán)境

2016-03-02 09:50:09

docker測試環(huán)境

2011-07-19 16:34:01

Xcode 證書

2016-11-03 09:49:04

2016-09-08 16:04:59

JavaDocker前端

2017-02-06 11:55:40

DockerJava Web環(huán)境

2023-08-08 08:34:47

漏洞環(huán)境獲取方法

2022-12-05 08:41:39

Redis調(diào)試環(huán)境源碼

2022-06-24 10:11:15

DockerLinux

2022-03-18 13:58:00

RocketMQ消息隊列

2015-12-30 13:58:00

DockerGit開發(fā)環(huán)境

2015-01-05 14:16:16

DockerFig自動化容器編排

2013-10-30 22:41:23

Clouda環(huán)境

2013-10-28 01:44:56

mysql載均衡高可用環(huán)境

2011-03-14 13:06:58

LAMP搭建

2011-03-09 13:02:31

LAMP環(huán)境搭建

2009-03-10 18:36:56

LinuxLAMP環(huán)境搭建
點贊
收藏

51CTO技術(shù)棧公眾號

一区二区三区久久精品| 菠萝蜜视频在线观看入口| 日本成人片在线| 色综合网站在线| 男女污污的视频| 成人午夜短视频| 久久久天堂国产精品| 日日夜夜精品视频免费| www.av一区视频| 婷婷精品进入| 国产成人精品日本亚洲专区61| 日本一区二区三区电影免费观看| 日韩精品中文在线观看| 久草在线视频福利| 日韩精品专区在线影院观看| 蜜桃视频在线观看免费视频网站www| 午夜精品久久久久久久蜜桃app| 97dyy97影院理论片在线| 中文字幕在线一区免费| 福利视频网站| 伊人夜夜躁av伊人久久| 五月天最新网址| 午夜精品免费在线| 牛牛热在线视频| 日韩欧美高清视频| 可以在线观看的av| 欧美色图免费看| 天堂av最新在线| 日韩精品视频中文在线观看| 二区三区不卡| www日韩欧美| 99er精品视频| 国内精品久久久久久| 精品在线91| 91福利视频导航| 亚洲中午字幕| 国产女人18毛片| 国产亚洲精品免费| videoxxxx另类日本极品| 色婷婷综合久久久久中文 | 中文字幕在线中文| 99精品欧美一区| 黄色免费网址大全| 亚洲国产日韩精品| 91电影在线播放| 亚洲韩国青草视频| 国产成人免费精品| 2019中文字幕在线| 欧美mv日韩| 久久国产精品一区二区三区| 久久精品国产在热久久| 无码少妇一区二区三区芒果| 亚洲777理论| 亚洲七七久久综合桃花剧情介绍| 亚洲天堂男人的天堂| eeuss鲁片一区二区三区| 国产精品一区电影| 免费看日韩精品| 四季av一区二区| 精品国产精品自拍| 超级碰碰不卡在线视频| 久久99久久99精品中文字幕| 99九九热只有国产精品| 亚洲在线不卡| 亚洲色图另类专区| 超碰在线中文字幕| 日本久久久久久久久久久| 日日摸夜夜添夜夜添精品视频 | av免费中文字幕| 亚洲国产成人精品视频| 最爽无遮挡行房视频在线| 美女av一区二区| 欧美视频导航| 日本午夜激情视频| 色综合久久久网| 免费成人高清在线视频| 3d精品h动漫啪啪一区二区| 成人一级视频在线观看| 欧美zozo| www日韩中文字幕在线看| 亚洲性感美女99在线| 五月婷婷激情久久| 欧美精品久久天天躁| 99re8这里有精品热视频免费 | 亚洲 欧美 综合 另类 中字| 亚洲午夜羞羞片| 深夜视频一区二区| 国产伦理久久久| 国产精品久久网站| 涩涩av在线| 3d动漫啪啪精品一区二区免费 | 91美女片黄在线观看游戏| 成人午夜激情在线| 成人高清免费在线| 国产精品视频不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 九色在线播放| 国产97在线亚洲| 久久久久久久一区| 中文字幕在线高清| 久久久久欧美| 黑人欧美xxxx| 精品一区毛片| 日本一极黄色片| 亚洲欧美中文另类| 青青草91视频| 免费黄网站在线播放| 成人在线免费观看视视频| 国产亚洲午夜高清国产拍精品 | 欧美大片拔萝卜| 亚洲九九在线| 精品伦理一区二区| 欧美寡妇偷汉性猛交| 国产乱国产乱300精品| 精精国产xxxx视频在线| 91在线|亚洲| 亚洲一区二区欧美激情| 国产精品白丝一区二区三区| 日韩国产精品毛片| 精品福利一区二区三区免费视频| 亚洲一区欧美| 自拍偷拍在线视频| 国产精品草莓在线免费观看| 国产精品人妖ts系列视频| 欧美大陆国产| 免费看日本毛片| 日韩中文字幕国产| 99精品久久只有精品| 亚洲热av色在线播放| 欧美 日韩 亚洲 一区| 影音先锋欧美精品| 成人av第一页| 国产成人久久精品一区二区三区| www.com毛片| 欧美成年人视频| 国产欧美一区二区精品性| 四虎精品永久免费| aaaaaa亚洲| 91精品国产99| 亚洲一区二区三区四区五区黄| 精品大片一区二区| 亚洲大胆精品| 国产精品久久久对白| 91精品国产综合久久久久久| 久久久一二三| av影院在线免费观看| 国产xxxx振车| 欧美激情手机在线视频 | 二吊插入一穴一区二区| 国产性生活免费视频| 在线亚洲国产精品网| 国产日韩影视精品| 日韩精品a在线观看91| 最新av在线网站| 韩国一区二区三区美女美女秀| 555夜色666亚洲国产免| 国产亚洲欧洲| 一区二区电影免费观看| 尤物av无码色av无码| 97av在线影院| 色婷婷av一区二区三区gif| 亚洲茄子视频| 日本孕妇大胆孕交无码| 无码人妻精品一区二区蜜桃百度| 一区二区三区黄色| 国产婷婷色一区二区三区| 日韩电影免费在线观看| 超碰在线国产| 成年人深夜视频| 69av在线视频| 欧美影片第一页| 国产精品99久久久久久宅男| 国产suv精品一区二区四区视频| 一级毛片在线视频| 亚洲一区二区精品在线| 97免费在线视频| 在线观看91精品国产麻豆| av在线综合网| 综合天天久久| 日韩一级特黄| 国模吧精品人体gogo| 可以看毛片的网址| 国产精品欧美在线| 日韩毛片在线看| 一区二区三区在线视频播放| 肉丝袜脚交视频一区二区| 亚洲不卡视频| 国产一二区在线| 色爱综合网站| 视频二区一区| 国产精品99久久久久久www| 亚洲国产精品系列| 久久久久成人网| 一区二区三区日韩精品视频| 一本色道久久综合亚洲精品不| www.久久久.com| 香蕉视频在线看| 天天操天天摸天天爽| 欧美一区亚洲二区| 欧美资源在线观看|