一.开启Debug日志
MySQL提供了trace机制方便定位
1.cmake时要开启编译选项-DWITH_DEBUG=1 -DCMAKE_BUILD_TYPE=Debug这两个参数
2.设置trace日志的路径,export MYSQL_DEBUG=d:t:O,/tmp/client.trace。如果不配置,默认保存在tmp/mysql.trace
3.mysql启动的时候,需要增加--debug参数,如:bin/mysqld --defaults-file=../etc/my_8130.cnf --debug
4.由于是处于调试模式,建议一个链接一个线程,即修改配置文件,配置:thread_handling = 0
5.开启trace日志后,可以利用 DBUG_PRINT("info", ("get_first_used_partition:%d",part_id)); 宏来调试输出
二、GDB调试
core文件调试
bt获取到调用堆栈后
f 数字:进入对于的函数堆栈
p 变量:变量如果是指针需要带*,对于this指针,p *this会打印出变量的结构体
打印变量格式化:set print pretty on
attach调试
1.attach pid
2.设置断点,基于原函数 比如:b Item_func_murmurHashCodeAndMod::val_int
3.继续向下执行 c
4.触发断点后,执行bt
5.需要向下单步调试s(或者c直接向下执行)
6.清除所有断点:
先查看所有断点:info break
删除单个断点:delete 1 删除#1断点
删除所有断点:delete break
三.MySQL测试用例集
首先cmake的时候需要增加参数 -DINSTALL_MYSQLTESTDIR=${路径}
这个路径一般都放在和bin目录平级的目录,再cmake install说的时候自动安装拷贝到该目录
./mtr 执行所有的测试用例集
./mtr --suite="tdsql_hide_partitions" 执行suite目录下tdsql_hide_partitions目录下所有的测试集
./mtr --do-test="binlog_xa_prepared_disconnect" 执行t/目录下对于的test文件,如mysql-test/t/binlog_xa_prepared_disconnect.test
./mtr --mysqld="--lock_wait_timeout=100" 指定超时参数
注意:
1.mtr执行的时候可能会遇到result文件和实际执行结果是一样的,但是由于wiondws和unix下的换行编码问题,导致md5不一样,需要对windows下的result文件中的回车做转码处理:sed -i 's/\r//' 文件
2.mtr会在mysql-test/var/log下创建一个msyql临时实例用来测试
q其他参数:
nowarnings:mysql-test执行的时候遇到mysql错误日志中的warnings也会自动停止,所以我们一般要带上--nowarnings参数;
big-test:某些被标记为”big“的测试用例默认是不执行的,所以我们一般也带上参数--big-test;
force:一般情况下,一旦有测试用例失败mtr会自动退出,所以我们一般加上--force参数,发生错误后强制继续向下执行;
mysqld:指定mysqld启动的默认参数: --mysqld="--innodb_b