有时我们想知道Mysql执行一条Sql语句中到底做了什么,最可靠的答案就是自己调试下Mysql,下面讲述如何在Windows下搭建Mysql调试环境。
一、软件版本
软件 | 版本 |
---|---|
Visual Studio | Vs2008 |
Mysql | 5.6.17 |
CMake | 3.14.1 |
Bison | 2.4.1 |
CygWin | 最新版 |
二、安装步骤
1、安装Vs2008,具体过程不述,可以在微软的官网上下载。
https://www.microsoft.com/zh-cn/download/details.aspx?id=13276
2、下载mysql,从mysql官网选择5.6.17
https://downloads.mysql.com/archives/community/
3、安装CMake,以下是官网地址
http://www.cmake.org/cmake/resources/software.html,
安装路径最好不要有空格或中文,安装好后将bin目录添加到系统环境变量中
4、安装GNUWin32 Bison,下载地址为:http://gnuwin32.sourceforge.net/packages/bison.htm, 同样安装路径最好为英文,并且不要有空格。安装后将bin路径添加到系统环境变量。
这个安装包做的不好,下载好建议执行bin下面的文件,看是否有报错,如果报什么dll不存在,可以从网上下载相应的dll文件放到系统目录 下
5、安装CygWin,下载地址为:http://www.cygwin.com
选择最新版就可以了
6、生成vs的解决方案文件:
cmake . -G "Visual Studio 9 2008"
这一步执行完成后会生成解决方案文件mysql.sln文件。
7、将sql/sql_locale.cc文件改成utf-8编码,选择格式为:utf-8 with bom
8、修改文件sql\mysqld.cc中的test_lc_time_sz函数,注释掉以下代码
if ((*loc)->max_month_name_length != max_month_len ||
(*loc)->max_day_name_length != max_day_len)
{
DBUG_PRINT("Wrong max day name(or month name) length for locale:",
("%s", (*loc)->name));
DBUG_ASSERT(0);
}
9、设置调试参数,--explicit_defaults_for_timestamp --skip-grant-tables
然后就可以Debug了,中间如果有编译报错,可以看下具体报什么错,然后可以手动执行相应的命令行。
三、调试
总共下来,一共有120多个工程,以下是本机的截图:
将mysqld项目设为启动项目就可以调试了。
以下是一些关键函数断点:
handle_one_connection
do_command
dispatch_command
mysql_exexute_command
然后我们可以观察每个变量的值进行调试了: