【MySQL源码】使用CLion 远程调试MySQL源码

news2024/11/26 17:24:52

目录

0 准备工作

1 IDE 

2 下载MySQL源码

​编辑

一 配置CLion

1 添加远程服务器

2 配置远程服务器环境

3 升级gdb版本

4 升级CMake版本

5 修改远程服务器文件上传的目录的对应关系 

5 配置cmake

7 初始化MySQL 

8 启动MySQL


作为DBA工作多年,如果还是停留在运维阶段,很难提高自己的技术水平。阅读 MySQL 及相关工具的源代码,不仅是数据库研发人员的日常,也是 DBA 进阶的必经之路,全方位提高技术水平。

0 准备工作

1 IDE 

IDE CLion下载 CLion:JetBrains 出品的 C 和 C++ 跨平台 IDE

使用IDE的目的主要是方便阅读/debug MySQL源码 

2 下载MySQL源码

下载地址

MySQL :: MySQL Community Downloads

 下载页面有两种源码包 选择下载包含boost的源码包

一 配置CLion

1 添加远程服务器

打开IDE CLion  --> Open  本地打开MySQL的源码 

点击 Preferences --> Tools

点击 + 添加源端的服务器 填写 host 端口 用户名 密码等信息 --> 点击 Test Connection --> 出现连接成功即可 

2 配置远程服务器环境

从上图可以看到 cmake  和 gdb 的版本较低,不满足要求。下面需要升级gdb和cmake的版本。如果你的版本都满足要求 可以跳过第3,4步。

3 升级gdb版本

参考博客  Linux之gdb安装和升级_gdb 升级-CSDN博客

查看目前版本

# 查看当前版本
gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)

# 下载压缩包
wget http://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.gz

# 解压 
tar -zxvf gdb-7.8.tar.gz
chown  -R root.root gdb-7.8
# 编译安装
cd  gdb-7.8
mkdir build
./configure
make
make install 

# 二进制命令在 /usr/local/bin/ 下
/usr/local/bin/gdb --version

在 C 语言项目中,预编译时的安装路径通常是由 configure 脚本或 CMake 构建系统生成的。这个路径通常取决于多个因素,包括系统默认路径、用户指定的参数,以及软件包的配置选项。在没有指定 PREFIX 参数的情况下,通常会使用默认路径。

以下是一些方法,你可以查看在没有指定 PREFIX 参数时,预编译时二进制文件会安装到哪里:

1. 查看 Makefile

在 C 语言项目的源代码目录中,可以查看 Makefile 或者 Makefile.in 文件,这些文件中包含了关于预编译时安装路径的信息。查找类似于 prefixDESTDIR 的关键字,这些关键字通常用于指定安装路径。

4 升级CMake版本

 wget https://cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz --no-check-certificate

 tar -zxvf cmake-2.8.12.2.tar.gz

cd cmake-2.8.12.2

./bootstrap

gmake

 gmake install

5 修改远程服务器文件上传的目录的对应关系 

默认路径在tmp 随机字符串生成一个目录

修改为自己想放的位置 /home/software/mysql_source_code

  

5 配置cmake

BuilD type :debug

tooolchain :Remote host

Cmake option: . -DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data

Built directory : .

参数解释: 

  1. -DWITH_DEBUG=1: 启用调试模式。这将编译MySQL服务器和相关的组件,以便在调试时能够获取更多的信息和日志。

  2. -DDOWNLOAD_BOOST=1: 下载并构建Boost库。Boost是一个提供许多用于C++的工具和库的开源项目。这个选项告诉CMake下载Boost库并将其集成到MySQL的构建中。

  3. -DWITH_BOOST=./boost: 指定Boost库的位置。这告诉CMake在当前目录下寻找名为"boost"的目录,并将其用作Boost库的位置。

  4. -DCMAKE_INSTALL_PREFIX=build_out: 指定安装目录的前缀。在构建和安装完成后,MySQL将被安装到"build_out"目录下。

  5. -DMYSQL_DATADIR=build_out/data: 指定MySQL数据目录的位置。MySQL数据目录是存储数据库文件的地方。在这里,它被设置为"build_out/data"。

修改完成之后开始上传  上传需要一些时间 可以在 filetransfer 看到文件上传的详情

报错 1

-- Packaging as: mysql-5.7.28-Linux-x86_64
-- WITH_BOOST=/home/software/mysql_source_code/boost/boost_1_59_0/boost
-- BOOST_INCLUDE_DIR 
-- LOCAL_BOOST_DIR LOCAL_BOOST_DIR-NOTFOUND
-- LOCAL_BOOST_ZIP LOCAL_BOOST_ZIP-NOTFOUND
-- Could not find (the correct version of) boost.
-- MySQL currently requires boost_1_59_0

解决 :

这个调整Cmake的配置解决 

报错2 

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:71 (MESSAGE):
  Curses library not found.  Please install appropriate package,

 解决:

yum install ncurses-devel

7 初始化MySQL 

--defaults-file=/etc/my_5306.cnf --initialize --initialize-insecure --user=mysql

参数解释 

--defaults-file=/etc/my_5306.cnf  配置文件

--initialize 初始化

--initialize-insecure 不设置初始的密码

--user=mysql 使用用户

将以上命令填写到 

点击 edit  Configure 

左侧选择 mysqld ,将以上命令填写到 Program arguments 

初始化 数据目录生成在配置文件配置的目录下 

要注意目录是否存在 ,目录的用户等问题

点击run mysqld 进行初始化。相当于安装MySQL时进行初始化,只不过是在本地Clion 上进行了。

8 启动MySQL

--defaults-file=/etc/my_5306.cnf --debug=d,error,warning,info:F:L

启动时加的debug 参数 的含义

官方文档大概讲解

MySQL :: MySQL 8.0 Reference Manual :: 5.1.7 Server Command Options

官方文档详细讲解:

MySQL :: MySQL 8.0 Reference Manual :: 5.9.4 The DBUG Package

在cmake的时候需要加参数 -DWITH_DEBUG=1 ,然后启动MySQL实例的时候加参数--debug才有效

F 显示 每行调试或跟踪输出相关的源码文件名。

L 显示每行debug或trace输出相关的 源码文件的行数

i.显示每行debug或trace输出 相关的进程ID 或 线程ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InnoDB存储引擎中的锁

文章目录 概要一、需要解决的问题二、共享锁和独占锁1.1 锁定读1.2 表级别的共享锁、独占锁 三、行锁3.1 数据准备3.2 几种常见的行级锁3.3 行锁升级为表锁 概要 关于MySQL涉及到的锁,大致可以总结如下: MyISAM存储引擎在开发过程中几乎很少使用了&…

虾知(知虾):助力Shopee卖家实现市场分析和选品策略优化的神器

在如今的电商市场竞争激烈的背景下,卖家需要借助数据分析工具来了解市场需求、热销产品和竞争状况,以制定明智的选品策略。而虾知(知虾)作为一款专为Shopee卖家设计的数据分析工具,为卖家提供全面的市场分析、商品分析…

InstructDiffusion-多种视觉任务统一框架

论文:《InstructDiffusion: A Generalist Modeling Interface for Vision Tasks》 github:https://github.com/cientgu/InstructDiffusion InstructPix2Pix:参考 文章目录 摘要引言算法视觉任务统一引导训练集重构统一框架 实验训练集关键点检测分割图像…

Could NOT find resource [logback-test.xml]

修改 之后就可以正常启动了

wsj0数据集原始文件.wv1.wv2转换成wav文件

文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 ​ 最近做语音分离实验需要用到wsj0-2mix数据集,但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后,由于原始的语音文件后缀是wv1或…

Linux安装mongodb数据库(详细)

一、下载安装包 本文使用 tgz 方式,根据服务器类型在官网下载 MongoDB 安装包。官方地址:https://www.mongodb.com/try/download/community 下载方式如图所示: 选择版本 关于 MongoDB 的版本选择,参见如下版本差异: 1、将从官…

推荐几款免费的智能AI伪原创工具

在当今信息快速传播的时代,创作者们常常为了在激烈的竞争中脱颖而出而苦苦挣扎,而其中的一项挑战就是创作出独具创意和独特性的内容。然而,时间有限的现实让很多人望而却步。在这个背景下,免费在线伪原创工具成为了创作者们的得力…

csapp-linklab之第二阶段“输出学号”实验报告

本阶段主题是链接中的“重定位”。两次重定位,一次是绝对地址重定位,一次是PC相对地址重定位。 本题目标依旧是输出学号,反汇编phase2.o,看到学号“0000000000”已经存放在只读数据区了。现在任务就是改do_pheas的指令和重定位表…

示波器高压探头的操作说明及使用注意事项

操作说明: 连接探头衰减端的地线(鳄鱼夹)到好的接地点或可靠的接地测试端。连接BNC头到示波器的BNC输入端口。选择示波器要求的量程范围。 注意:请务必在连接测试前把高压电源关闭。 注意事项: 请勿将测试设备的接地线从地面接线柱上移开。…

“创新视频封面设计,轻松提取其他视频第一帧,让你的视频更具吸引力!“

你是否曾经为如何为自己的视频定制封面而烦恼?现在,我们为你推荐一款全新的视频封面提取工具,让你的视频封面设计更加简单、快捷! 首先,运行媒体梦工厂,在板块栏路选择“视频封面”板块。并点击“提取封面…

【C++】杨辉三角详解和C++代码示例

杨辉三角的每行第i个数是由上一行的第i-1个数和第i个数相加得到的&#xff0c;且每行的第一个数和最后一个数都是1&#xff0c;每行的中间个数等于它两肩上的数字相加。 目录 C代码输出结果8行输出15行输出25行输出 C代码 #include <iostream> #include <vector>…

如何用CHAT写一篇儿童地理入门的文章?

问CHAT&#xff1a;从初中地理知识的角度&#xff0c;以"地球&#xff0c;我的家“为标题写一篇儿童地理入门的文章&#xff0c;主要概述地球的地理特点&#xff0c;引起孩子对地球地理知识的兴趣。可以用这些相关生活场景来延伸&#xff1a;在学校上地理课时学习关于地球…

ThinkPHP的方法接收json数据问题

第一次接触到前后端分离开发&#xff0c;需要在后端接收前端ajax提交的json数据&#xff0c;开发基于ThinkPHP3.2.3框架。于是一开始习惯性的直接用I()方法接收到前端发送的json数据&#xff0c;然后用json_decode()解析发现结果为空&#xff01;但是打印出还未解析的值却打印得…

第二十章Java博客

如果一次只完成一件事情&#xff0c;很容易实现。但现实生活中&#xff0c;很多事情都是同时进行的。Java中为了模拟这种状态&#xff0c;引入了线程机制。简单地说&#xff0c;当程序同时完成多件事情时&#xff0c;就是所谓的多线程。多线程应用相当广泛&#xff0c;使用多线…

【LeetCode刷题】数组篇1

&#x1f387;数组简单题Part &#x1f308; 开启LeetCode刷题之旅 &#x1f308; 文章目录 &#x1f387;数组简单题Part&#x1f370;1.两数之和&#x1f451;思路分析1.暴力法2.哈希表法 &#x1f370;26.删除有序数组中的重复项&#x1f451;思路分析1.双指针2.利用vector…

linux安装docker(脚本一键安装配置docker)

1、创建脚本 vi initDocker.sh #安装前先更新yum&#xff0c;防止连接镜像失败 yum -y update#卸载系统之前的docker&#xff08;可选择&#xff0c;我这里直接注释了&#xff09; #yum remove docker docker-client docker-client-latest docker-common docker-latest docke…

自动化接口测试之Postman(一篇搞定)

该篇文章针对已经掌握 Postman 基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境&#xff1a; Window 7 - 64 Postman 版本&#xff08;免费版&#xff09;&#xff1a;Chrome App v5.5.3 不同版本页面 UI 和部分…

Day13 qt 高级控件,自定义控件,事件,绘图,定时器

高级控件 QListWidget 列表展示控件 效果 添加数据 ui->listWidget->addItem("A"); QStringList list; list << "B" << "C" << "D"; ui->listWidget->addItems(list); 设置item点击 void Widget::on_l…

aspera用户必看:这些替代方案也不逊色!

如果正在使用Aspera进行数据传输&#xff0c;但是由于某些原因例如成本、许可证等无法继续使用该工具&#xff0c;那么可能需要寻找替代方案。在本文中&#xff0c;我将介绍几个类似的替代工具&#xff0c;它们可以有效地解决数据传输的问题&#xff0c;并且不会在性能方面逊色…

通用闪存存储(UFS)市场研究,预计2029年将达到1,930.99百万美元

UFS产品定义及统计范围 UFS &#xff08;Universal Flash Storage&#xff0c;通用闪存存储&#xff09;&#xff0c;UFS是一种高性能接口&#xff0c;设计用于需要最小化功耗的应用&#xff0c;包括智能手机和平板电脑等移动系统以及汽车应用&#xff0c;其高速串行接口和优化…