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数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.