解决方案:
因为 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 )
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)