1. 先搭建windows 调试环境. mysql5.6在Windows下编译,试探过程记录. http://blog.csdn.net/fei33423/article/details/49398581
1.1 安装好对应的studio插件
2. 搜索了几篇源代码结构和基本数据结构的文章.
MySQL源码分析以及目录结构 http://blog.sina.com.cn/s/blog_7045cb9e0100t5v9.html
补充:
enum enum_server_command
{
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS,
COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING,
COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP,
COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE,
COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE,
COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON,
COM_BINLOG_DUMP_GTID,
/* don't forget to update const char *command_name[] in sql_parse.cc */
/* Must be last */
COM_END
};
"select * from table" 语句在 THD的net中.
3. 参考上文 先初步静态看了下 初始化源代码 ,网络启动, 网络监听, 命令执行的源代码.
查看了sql_parser.cc的outline ( file structure ) ,找到一个execute_sqlcom_select ,看了下调用堆栈.
加断点在参考文中说明中的
sql_parser.cc的 switch (command) {
case COM_INIT_DB:
{}
然后 进行调试.
会有很多command是COM_PING
4. 有一些是专门给debug用的函数, 不知道有什么好处.比如说execute_sqlcom_select调用堆栈里的 handle_connection_in_main_thread (mysqld.cc)