第39问(如何编译 MySQL 的调试版本)
文章图片
问
我们在第16问中使用过 mysql 内置的调试版本 mysqld-debug ,但有些 MySQL 版本中没有内置的调试版本.
这次介绍一下如何编译一个调试版本
实验
我们先准备一个安装了 docker 的环境, 之所以用容器, 是因为我们在进行各种试验后, 可以将容器毁掉重建, 保持系统环境干净统一, 非常便利.
首先开启一个 devtoolset 容器:
文章图片
确认自己在容器内:
文章图片
下载 MySQL 源码包并解压:
文章图片
接下来安装依赖包, 一共分为 3 类依赖: 编译用的工具, MySQL 的依赖包, 以及开启 DTRACE 调试功能用的依赖包
(DTRACE 调试功能 我们以后会介绍)
文章图片
创建一个 build 目录, 之后 MySQL 会将编译的过程文件和结果都放在这个文件夹里:
文章图片
对编译进行配置:
文章图片
在一大段输出后, 可以看到配置成功的信息:
文章图片
现在可以正式编译了:
文章图片
经过漫长的五彩斑斓的输出, 编译顺利成功:
文章图片
在 build/sql 文件夹中, 已经形成了调试版的 mysqld :
【第39问(如何编译 MySQL 的调试版本)】
文章图片
我们为什么需要调试版本的 MySQL 呢?小贴士
如何像官方一样编译正式的 MySQL ?
在配置环节, cmake 命令中, 将 -DWITH_DEBUG=1 换成 -DBUILD_CONFIG=mysql_release 即可
在第35问中, 我们使用过 gdb 调试器, 用于限制 MySQL 的行为, 来研究相关机制.
MySQL 在编译时, 会进行一些优化, 会将一些调试信息抹掉以提高性能. 这些被抹掉的调试信息 是 我们使用调试器时所需要的.
我们自己编译了调试版本的 MySQL, 就有了这些信息的加持, 我们就能使用更多的调试手段.
当然, 保留了调试信息, 就意味着运行性能会下降, 所以 MySQL 的调试版本不能用来做性能测试.
关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!
文章图片
推荐阅读
- 热闹中的孤独
- 第6.2章(设置属性)
- parallels|parallels desktop 解决网络初始化失败问题
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 第三节|第三节 快乐和幸福(12)
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- android第三方框架(五)ButterKnife
- 开学第一天(下)
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 进必趋|进必趋 退必迟,问起对 视勿移