mysql 在 VS2005上面单步调试

2024-01-25 13:48

本文主要是介绍mysql 在 VS2005上面单步调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

http://www.xianfen.net/Article137.aspx

http://database.ctocio.com.cn/tips/114/8305614.shtml

http://forge.mysql.com/wiki/Building_MySQL_on_Windows

 

环境准备:
1. 获取MySQL最新源码:当前版本为5.1.45:http://dev.mysql.com/downloads/mysql/ (Windows (x86, 32-bit), ZIP Archive),解压到工作目录,如D:/mysql-5.1.45
2. 安装VS2005,任何版本都可。如果是Express版本,需要再安装Windows SDK, Server 2003 R2 Platform SDK下载地址为:http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en
3. 安装CMake(Windows版本),下载地址:http://www.cmake.org/cmake/resources/software.html, 旧版本可能不支持生成VS2005解决方案,推荐用最新版本。
注意:安装路径最好为英文,并且不要有空格。安装后将bin路径添加到系统环境变量。
4. 安装GNUWin32 Bison,下载地址为:http://gnuwin32.sourceforge.net/packages/bison.htm, 同样安装路径最好为英文,并且不要有空格。安装后将bin路径添加到系统环境变量。
5. 安装CygWin,下载地址为:http://www.cygwin.com/setup.exe, 选择模块时要选上Perl and Python模块。
注意:如果只编译,不做test,可不安装CygWin.

二. 编译源代码:
1. 源码目录中sql/sql_locale.cc文件包含各地本地化语言,默认用的UTF-8 without BOM编码,编译器不能正确识别,用含有编码转换功能的文本编辑器将其另存为为UTF-8编码格式。

2. 控制台进入MySQL根目录,运行Win/configure.js脚本,脚本的参数为:
WITH_INNOBASE_STORAGE_ENGINE         Enable particular storage engines
WITH_PARTITION_STORAGE_ENGINE
WITH_ARCHIVE_STORAGE_ENGINE
WITH_BLACKHOLE_STORAGE_ENGINE
WITH_EXAMPLE_STORAGE_ENGINE
WITH_FEDERATED_STORAGE_ENGINE
__NT__                             Enable named pipe support
MYSQL_SERVER_SUFFIX=<suffix>        Server suffix, default none
COMPILATION_COMMENT=<comment> Server comment, default "Source distribution"
MYSQL_TCP_PORT=<port>             Server port, default 3306
CYBOZU                            Default character set is UTF8
EMBED_MANIFESTS                  Embed custom manifests into final exes, otherwise VS
default will be used. (Note - This option should only be
used by MySQL AB.)
WITH_EMBEDDED_SERVER            Configure solution to produce libmysqld.dll
and the static mysqlserver.lib

因此,该命令行可以是如下所示。
Cscript win/configure.js WITH_INNOBASE_STORAGE_ENGINE WITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro
运行结果应该与如下结果类似:
Microsoft (R) Windows Script Host Version X.X
Copyright (C) Microsoft Corporation XXXX-XXXX. All rights reserved.

done!

3. 创建VS解决方案,在MySQL源文件Win目录下有一些批处理:
build-vs71.bat VS2003
build-vs8.bat VS2005
build-vs8_x64.bat VS2005,编译出64bit MySQL
build-vs9.bat VS2008
build-vs9_x64.bat VS2008,编译出64bit MySQL
这些批处理内调用的是CMake,可以在命令行敲入CMake,查看CMake支持的VS版本。
这里我们用VS2005,目标运行平台为32bit,所以运行Win/build-vs8.bat。
运行后,在MySQL根目录生成了MySql.sln,用VS2005打开,可以看到有56个项目。

将sql 中的 mysqld.cc 中的函数 test_lc_time_sz()中的

(*loc)->max_month_name_length = max_month_len;
(*loc)->max_day_name_length = max_day_len;
/*
    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);
    }
*/

编码总计算错误,先这么改,找到问题再说

 

在mysqld的属性页设置命令参数为:

--no-defaults --basedir=D:/mysql-5.1.45/sql --datadir=D:/mysql-5.1.45/win/data --character-sets-dir=D:/mysql-5.1.45/sql/share/charsets --log-bin-trust-function-creators --character-set-server=latin1 --language=D:/mysql-5.1.45/sql/share/english --console --loose-innodb_data_file_path=ibdata1:10M:autoextend --local-infile --loose-skip-innodb --key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M --ssl-ca=D:/mysql-5.1.45/mysql-test/std_data/cacert.pem --ssl-cert=D:/mysql-5.1.45/mysql-test/std_data/server-cert.pem --ssl-key=D:/mysql-5.1.45/mysql-test/std_data/server-key.pem --gdb --skip-log-bin --core-file --open-files-limit=1024

设置断点,比如查询的总入口是sql/sql_select.cc 中的 handle_select 函数。

 

 

 

--no-defaults --basedir=F:/mysql/mysql-5.1.49/sql --datadir=F:/mysql/mysql-5.1.49/win/data --character-sets-dir=F:/mysql/mysql-5.1.49/sql/share/charsets --log-bin-trust-function-creators --character-set-server=latin1 --language=F:/mysql/mysql-5.1.49/sql/share/english --console  --local-infile  --key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M --ssl-ca=F:/mysql/mysql-5.1.49/mysql-test/std_data/cacert.pem --ssl-cert=F:/mysql/mysql-5.1.49/mysql-test/std_data/server-cert.pem --ssl-key=F:/mysql/mysql-5.1.49/mysql-test/std_data/server-key.pem --gdb --skip-log-bin --core-file --open-files-limit=1024

 

 

--no-defaults --console --lc-messages-dir=F:/mysql/mysql-5.5.11/sql/share --basedir=F:/mysql/mysql-5.5.11/sql --datadir=F:/mysql/mysql-5.5.11/sql/data  --default-storage-engine=innodb --max_allowed_packet=8M --net_buffer_length=16K

 

建数据库

--no-defaults --console --bootstrap --lc-messages-dir=F:/mysql/mysql-5.5.21/sql/share --basedir=F:/mysql/mysql-5.5.21/sql --datadir=F:/mysql/mysql-5.5.21/sql/data  --default-storage-engine=innodb --max_allowed_packet=8M --net_buffer_length=16K

 

编译mysql项目,将会在mysql-5.1.45-beta/client_debug目录下生成mysql.exe。使用“启动新实例”或者“进入单步执行新实例”进行调试。命令参数为:-u root

在新窗口中输入SQL语句,就可以执行了,mysqld就是后台服务器进程是sql/mysqld.cc中的main函数,sql是输入前端,是mysql/mysql.cc中的main函数

断点位置:sql/sql_parse.cc 中的 mysql_execute_command(THD *thd) 中的 switch (lex->sql_command)

测试语句:SELECT VERSION(), CURRENT_DATE;

 

 linux下面,root用户启动数据库

./mysqld --defaults-file=/root/mysql/usr/local/mysql/bin/my.cnf --basedir=/root/mysql/usr/local/mysql --datadir=/root/mysql/usr/local/mysql/data --user=root

./mysqladmin -u root -p shutdown

 

 

MySQL默认的数据文件存储目录为/var/lib/mysql
把MySQL服务进程停掉:mysqladmin -u root -p shutdown

找到my.cnf配置文件

  如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:

  [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

 编辑MySQL的配置文件/etc/my.cnf

  为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。

 

show variables like 'log_slave_updates';

 

ps -alef |grep mysql

 

介绍监视的

http://dev.mysql.com/doc/refman/5.5/en/innodb-monitors.html

 

http://drizzle.org/

 

http://kb.askmonty.org/

 

https://launchpad.net/percona-xtradb

 

http://www.mysqlperformanceblog.com

这篇关于mysql 在 VS2005上面单步调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/643461

相关文章

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分