第39问:如何编译 MySQL 的调试版本

Posted 爱可生开源社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第39问:如何编译 MySQL 的调试版本相关的知识,希望对你有一定的参考价值。

我们在第16问中使用过 mysql 内置的调试版本 mysqld-debug ,但有些 MySQL 版本中没有内置的调试版本.

这次介绍一下如何编译一个调试版本


我们先准备一个安装了 docker 的环境, 之所以用容器, 是因为我们在进行各种试验后, 可以将容器毁掉重建, 保持系统环境干净统一, 非常便利.

首先开启一个 devtoolset 容器:

第39问:如何编译 MySQL 的调试版本
确认自己在容器内:
第39问:如何编译 MySQL 的调试版本
下载 MySQL 源码包并解压:
第39问:如何编译 MySQL 的调试版本

接下来安装依赖包, 一共分为 3 类依赖: 编译用的工具, MySQL 的依赖包, 以及开启 DTRACE 调试功能用的依赖包

(DTRACE 调试功能 我们以后会介绍)

第39问:如何编译 MySQL 的调试版本

创建一个 build 目录, 之后 MySQL 会将编译的过程文件和结果都放在这个文件夹里:

第39问:如何编译 MySQL 的调试版本

对编译进行配置:

第39问:如何编译 MySQL 的调试版本

在一大段输出后, 可以看到配置成功的信息:

第39问:如何编译 MySQL 的调试版本

现在可以正式编译了:

第39问:如何编译 MySQL 的调试版本

经过漫长的五彩斑斓的输出, 编译顺利成功:

第39问:如何编译 MySQL 的调试版本

在 build/sql 文件夹中, 已经形成了调试版的 mysqld :


小贴士

如何像官方一样编译正式的 MySQL ?

在配置环节, cmake 命令中, 将 -DWITH_DEBUG=1 换成 -DBUILD_CONFIG=mysql_release 即可

我们为什么需要调试版本的 MySQL 呢?

在第35问中, 我们使用过 gdb 调试器, 用于限制 MySQL 的行为, 来研究相关机制.

MySQL 在编译时, 会进行一些优化, 会将一些调试信息抹掉以提高性能. 这些被抹掉的调试信息是我们使用调试器时所需要的.

我们自己编译了调试版本的 MySQL, 就有了这些信息的加持, 我们就能使用更多的调试手段.

当然, 保留了调试信息, 就意味着运行性能会下降, 所以 MySQL 的调试版本不能用来做性能测试.


相关推荐

关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!


本文关键字:#编译# #调试 #
想看更多技术好文,点个 “在看” 吧!

以上是关于第39问:如何编译 MySQL 的调试版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在发布版本中编译依赖于仅调试代码的断言()?

低版本 Xcode 真机调试高版本 iOS 的解决方法

《Elasticsearch 源码解析与优化实战》第2章 准备编译和调试环境

《Elasticsearch 源码解析与优化实战》第2章 准备编译和调试环境

编译安装mysql ERROR: 1 Can't create/write to file '/tmp/#sql_86b_0.MYI'

Mac下使用Clion调试MySQL版本5.7源码