• mysql 源码调试方法


     http://blog.itpub.net/29254281/viewspace-1847415/

    其中吕海波老师分享的内容是 《调试Oracle二三例:调试技术在日常运维中的应用》
    其中有关于调试MySQL源码的内容.

    实验如下:
    下载MySQL 5.7的源码
    http://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.9.tar.gz

    编译,注意增加 DEBUG 选项。(cmake的版本要求在2.8.2以上)
    cmake
    -DCMAKE_INSTALL_PREFIX=/home/mysql5.7/mysql-5.7.9/
    -DMYSQL_DATADIR=/home/mysql5.7/mysql-5.7.9/data
    -DSYSCONFDIR=/etc
    -DWITH_MYISAM_STORAGE_ENGINE=1
    -DWITH_INNOBASE_STORAGE_ENGINE=1
    -DWITH_MEMORY_STORAGE_ENGINE=1
    -DWITH_READLINE=1
    -DMYSQL_UNIX_ADDR=/home/mysql5.7/mysql-5.7.9/mysql.sock
    -DMYSQL_TCP_PORT=3306
    -DENABLED_LOCAL_INFILE=1
    -DWITH_PARTITION_STORAGE_ENGINE=1
    -DEXTRA_CHARSETS=all
    -DDEFAULT_CHARSET=utf8
    -DDEFAULT_COLLATION=utf8_general_ci
    -DWITH_DEBUG=1  
    -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp -DDOWNLOAD_BOOST_TIMEOUT=60000

    make && make install
     
    scripts/mysql_install_db --basedir=/home/mysql5.7/mysql-5.7.9/ --datadir=/home/mysql5.7/mysql-5.7.9/data --user=mysql5.7
     
    源码安装完MySQL之后,使用Debug模式启动
    mysqld --debug --console &

    然后重头戏来了

    先找到MySQL的PID
    [mysql5.7@localhost~]$ps -ef | grep mysqld
    mysql5.7 26086     1  2 19:29 pts/3    00:00:01 mysqld --debug --console
    mysql5.7 26170 26118  0 19:30 pts/3    00:00:00 grep mysqld

    这时候,tail -f /tmp/mysqld.trace 
    可以看到,任何在MySQL的操作,调用的函数信息都记录在这个trace文件中.

    找到其中任意一行,比如 PROFILING::status_change

    使用命令gdb调试.
    gdb --pid 26086 --tui

    将上述函数打断点.
    break PROFILING::status_change

    开启另外一个MySQL终端.执行查询,然后进入gdb的断点.

    可以看到源码,并且单步执行,打印变量.


    看静态的代码一般比较枯燥,用这种方式感觉比较好入门.

    同样的方式,也适用于Redis
  • 相关阅读:
    Seven Puzzle Aizu
    Cheese
    Curling 2.0
    Ball
    Property Distribution
    Red and Black
    Lake Counting
    Ants
    剑桥雅思写作高分范文ESSAY20
    剑桥雅思写作高分范文ESSAY19
  • 原文地址:https://www.cnblogs.com/zengkefu/p/5654967.html
Copyright © 2020-2023  润新知