mysql 源码研究 ~ 调试和基本环境(修订版)

一 如何根据gdb 调试mysql
   1 安装gdb
   2 gdb -p process_id
   3  如何设置断点
     1 在具体函数模块下设置 DBUG_ENTER("");
     2 b 函数模块名称
     3 bt
  4  由于gdb会导致其他session操作卡住
       1 设置next mysql从登录到执行sql都会被卡住,需要一段段进行调试
       2 设置contine mysql登录需要执行c,如果没有断点就一直运行,不会阻塞登录后的任何操作,直到再次遇到断点操作 
 5 结束进程
      kill -9 gdb 即可
 6  生成core文件
    使用'gcore core_name'命令生成coredump文件core_name。此命令会监控进程状态,然后捕捉异常,生成二进制文件
    使用'detach'命令断开连接。
7  分析core文件
   gdb core_name
8 常用命令 disass bt
  mysql源码目录
    1 sql目录 mysql大部分源码都存储在这里,包括main()函数,我们主要关注的就是这个
    2 plugin目录 部分插件源码所在地,包括半同步复制
    3 client目录 mysql客户端工具源码
 mysql源码编译安装和调试mysql源码包下载安装

   1 源码下载地址
     https://dev.mysql.com/downloads/mysql/
     选择 scode下载你需要的测试版本
  2 测试环境安装软件 
     安装 cmake,bison
  3 编译安装mysql
    1 参数需要加入 --DWITH_DEBUG=1
    2 最终编译参数
      cmake \
     -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
     -DSYSCONFDIR=/data/mysql/ \
     -DMYSQL_DATADIR=/data/mysql/data/ \
     -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
    -DMYSQL_TCP_PORT=3306 \
    -DEXTRA_CHARSETS=all \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_READLINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_DEBUG=1 \
    -DDOWNLOAD_BOOST=1
    make -j `grep processor /proc/cpuinfo | wc -l`
    make install
    /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
  3 启动服务
  4 gdb设置
   1 常用命令
     
 info threads:查看全部线程
       thread n:指定某个线程
       bt:查看某个线程栈帧
       b:设置断点
       c:继续执行
       s:执行一行代码,如果代码函数调用,则进入函数
       n:执行一行代码,函数调用不进入
        p:打印某个变量值
        list:打印代码的文本信息
   2 gdb启动mysql
       mainrun --defaults-file=/etc/my.cnf --user=mysql --gdb > debug.txt
       gdb -x /root/debug.file /usr/local/mysql/bin/mysqld
   3 设置断点
      b binlog_cache_data::flush
   4 gdb执行c(continue)->加载具体线程需要一段时间
   5 客户端可以连接进入
    6 测试
        客户端执行事务提交,commit会卡出并抛出断电信息
       bt进行查询线程栈帧

转载于:https://www.cnblogs.com/danhuangpai/p/11454498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值