使用 CLion 调试 MySQL

使用 CLion 调试 MySQL,第1张

解决方案:

因为 MySQL 5.6 初始化数据比较麻烦,不支持 mysqld 的 --initialize-insecure 选项。

所以不选用这种方式了。

第(2)和第(4)步可以参考 使用 CLion 调试 redis 。

编译成功输出:

击菜单栏【Build】=》【Install】进行安装。

安装成功输出:

初始化数据目录:

选择 mysqld configuration , 以 Debug 模式运行。

成功运行输出:

在 CLion 中,对 sql_parse.cc 中的 mysql_execute_command() 方法进行断点。

执行下面的语句连接上 mysql 服务。

在 mysql-client 中执行如下命令:

然后在 CLion 中即可发现已经被断点拦截,且可以发现 Statement class 中的 query_string 字段和 我们上面输入的命令 show databases 是一样。

至此,已经完成了 CLion 调试 MySQL 环境的搭建。

对于 mysqld ,可以通过设置 debug 系统变量在运行时更改 DBUG设置 。

此变量具有全局值和会话值:

该 debug_options 值是用 冒号( : )分隔 的字段的序列:

值中的每个字段都包含一个强制性标志字符。

我们使用的标志字符如下所示

以 root 用户连接到 mysqld。

然后,在 mysql 中执行 select 语句,就可以在 CLion console 中观察到如下图所示输出。

由于在写MySQL日志订阅服务时候,需要确定在什么event之后保存position,所以就开始研究MySQL的源码,刚开始采用最原始的打印输出的方式去调试,然后每次改完编译运行,效率好低,让我很绝望,然后我花了些时间研究下怎么使用CLion Debug MySQL。

获取源码

git clone https://github.com/mysql/mysql-server

编译安装初始化数据库

cd mysql-server

cmake \

-DCMAKE_INSTALL_PREFIX=/path/mysql/install \

-DMYSQL_DATADIR=/path/mysql/data \

-DSYSCONFDIR=/path/mysql/etc \

-DMYSQL_UNIX_ADDR=/path/mysql/mysql.sock \

-DWITH_DEBUG=1 \

-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/path/mysql-server/ -DDOWNLOAD_BOOST_TIMEOUT=60000

make -j 4

make install -j 4

mysqld --initialize-insecure --user=root --datadir=/path/mysql/data

启动MySQL,测试下是否安装成功

/path/install/bin/mysqld --defaults-file=/path/mysql/etc/my.cnf

使用CLion新建工程并打开源码目录之后,设置CLion

CMake Options和你编译安装时的选项一致

-DCMAKE_INSTALL_PREFIX=/path/mysql/install

-DMYSQL_DATADIR=/path/mysql/data

-DSYSCONFDIR=/path/mysql/etc

-DMYSQL_UNIX_ADDR=/path/mysql/mysql.sock

-DWITH_DEBUG=1

然后在CLion里,Reload CMake Project

在Run/Debug列表里就可以看到很多选项了

找到mysqld配置下启动参数

mysqld --defaults-file=/path/mysql/etc/my.cnf

然后以Debug模式启动,看下成功的效果

1、  在项目的CMakeLists.txt的开始处加上如下图所示配置(配置中的目录为你需要编译器的目录),平时开发调试的时候,设置SET( CROSS_COMPILE 0 ) 即不启用交叉编译。

2、 交叉编译:首先SET( CROSS_COMPILE  1),然后把项目通过scp传输到linux虚拟机或者服务器上

3、执行 cmake /path/your/project (项目根目录),这一步会生成交叉环境配置的Makefile

4、 在项目根目录,执行 make ,这一步会生成和项目名同名的可执行文件demo中为hello

5、Scp可执行文件到开发版,运行可执行文件。

SET( CROSS_COMPILE 1 )

IF ( CROSS_COMPILE )

    SET(

CMAKE_SYSTEM_NAME linux )

    SET(

TOOLCHAIN_DIR " /home/sz/project/arm-linux-gnueabihf ")

# specify the cross compiler

    SET( CMAKE_C_COMPILER   ${ TOOLCHAIN_DIR } /bin/arm-linux-gnueabihf-gcc )

    SET(

CMAKE_CXX_COMPILER ${ TOOLCHAIN_DIR } /bin/arm-linux-gnueabihf-g++ )

    SET(

GNU_FLAGS " -mfpu=vfp -fPIC ")

    SET(

CMAKE_CXX_FLAGS " ${ GNU_FLAGS } ")

    SET(

CMAKE_C_FLAGS " ${ GNU_FLAGS }  ")

# where is the target environment

    SET( CMAKE_FIND_ROOT_PATH  ${ TOOLCHAIN_DIR }

            ${ TOOLCHAIN_DIR } /arm-linux-gnueabihf/include

            ${ TOOLCHAIN_DIR } /arm-linux-gnueabihf/lib )

# search for programs in the build host directories (notnecessary)

    SET( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM

NEVER)

# for libraries and headers in the target directories

    SET( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY

ONLY)

    SET(

CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

ENDIF ( CROSS_COMPILE )


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8524679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存