MySQL|MySQL代码开发和调试利器CLion

MySQL|MySQL代码开发和调试利器CLion

文章图片

MySQL|MySQL代码开发和调试利器CLion

文章图片


MySQL源码对于很多人来说 , 是很有距离感的 。

【MySQL|MySQL代码开发和调试利器CLion】我想对于MySQL技术有兴趣的同学 , 基本测试过如下的一些方法(之一或者是全部):
1)下载MySQL源代码 , 一窥其中的奥妙
2)基于源码安装MySQL从cmake开始基本要被bisoncurcesboost折腾一波
3)在Windows环境配置MySQL源码环境 , 特殊配置Cross GCCMinGW
4)通过GDB调试MySQL , 设置断点 , 得到一些堆栈信息 , 进行全面跟踪
5)使用LLDB调试MySQL需要从源码仓库构建版本 , 基于MAC端还好 , Linux端还需要额外处理 。
6)通过pstackperfstrace等得到一些堆栈信息 , 不同水平的人分析的效果差异较大
7)通过应用管理中的一些特性或者bug , 从代码中去查找相关的逻辑 , 问题锁定的方向相对比较清晰 , 可能最尴尬的就是验证了下这个bug确实是个bug
在此 , 我不是要安利什么 , 我也做过这些尝试 , 有些尝试其实是很痛苦的 , 这个过程中的投入和收益是严重不成正比的 。 有句话说得好 , 对于你想做的事情 , 时间会给你答案 , 我想对于很多人来说 , 这个答案就是放弃 。
通过最近的一次线上问题修复 , 让我有了新一步的思考 。 问题的背景是一个GitHub开源的基于Java技术栈的后端服务 , 最近在数据流转中出现了数据问题 , 主要原因是基于时差的问题 , 对于这个问题自己看了相关的代码 , 也做了很多的调试和测试 , 整个过程都是在Windows环境下完成的 , 做完测试之后 , 在编译和发布的过程 , 走了一些弯路 , 最后发布到线上前又做了一次验证测试 , 发现和之前测试的结果竟然不一样 。
于是后续的补充测试是在Linux环境下进行的 , 我做了更多的测试和验证 , 最后的修复方案完全是基于命令行方式调整的 , 直观来看 , 流转效率和准确性比之前提高了好几倍 , 让我也有了一些欣喜和成就感 。
我开始重新思考这个过程中的一些弯路 , 我的初步思路是 , 我的服务是要发布在Linux X86_64位的环境下 , 而整个开发过程竟然都是在Windows下验证的 , 也就意味着存在一些可能会导致我原本Windows下的环境配置或者测试场景和Linux存在一些差异 , 尤其是一些依赖库的差异就更大了 , 这样就意味着会返工 , 那么为什么不直接在Linux下基于IDE开发呢 。
这么一想 , 突然发现我们基于Python的项目还早是按照这种模式做了很久了 , 我们是在VirtualBox中安装了Linux虚拟机 , 然后在上面配置了开发环境 , 最开始就是因为跨平台库依赖支持差异比较大 , 所以放弃了Windows侧的开发模式 , 从开始就在Linux下开始 , 这么些年下来 , 还真没感觉到太大的差异 。
我想很多人都会很自然的抗拒说 , Linux下的命令行模式不够友好 , 至少在MySQL源码方向上 , IDE用起来会很麻烦吧 , 目前我知道的工具 , 主要有VS CodeEclipse for C++CLion
经过周末的一些对比和测试 , 我选择了CLion为此还特意选定了一个风火轮图标 。

进入CLion配置整个MySQL源码环境 , 从系统命令行配置到IDE的配置切换 , 整个过程个把小时就差不多了 。


如果在查看代码中喜欢查看上下文 , 做下更细致的调试 , 我想这个工具的粒度和支持要更强大 , 细腻 。  

比如我们选择官网的MySQL源码包 , 比如:mysql-boost-5.7.31.tar.gz
假设路径如下:
basedir : /usr/local/mysql_5.7.31_sourcedatadir : /data/mysql_5.7.31_sourceboost:/root/mysql_5.7.31_source/boost_1_59_0
可以使用如下的cmake命令:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.7.31_source -DMYSQL_DATADIR=/data/mysql_5.7.31_source/  -DSYSCONFDIR=/data/mysql_5.7.31_source -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DMYSQL_UNIX_ADDR=/data/mysql_5.7.31_source/mysql.sock -DENABLED_LOCAL_INFILE=1 -DWITH_DEBUG=1 -DWITH_BOOST=/root/mysql_5.7.31_source/mysql-5.7.31/boost/boost_1_59_0
如果想省事些 , 直接先下载boost也可以 , 使用download选项
会自行映射boost_1_59_0/boost以及下面的目录和文件
如果不知道该映射的boost文件 , 则可以使用download选项
-DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/xxxx/boost_xxxx
命令行方式初始化数据库
cd /usr/local/mysql_5.7.31_source/bin./mysqld --basedir=/usr/local/mysql_5.7.31_source  --datadir=/data/mysql_5.7.31_source --initialize-insecure --user=mysql --server-id=57310
整个过程CLion的配置和命令行的参数是一模一样的 。

启动MySQL的过程 , 配置和命令行方式是一样的 , 只是通过CLion启动 , 然后就可以开启调试模式 , 得到一些更具体的信息了 。

这是基本真实环境下的开发调试 , 而且代码和服务都是在环境中真实可见的 , 这种体验和学习效果强烈推荐 。


    推荐阅读