mysql 在 VS2005上面单步调试

环境准备:1. 获取MySQL最新源码:当前版本为5.1.45: (Windows (x86, 32-bit), ZIP Archive),解压到工作目录,如D:/mysql-5.1.452. 安装VS2005,任何版本都可。如果是Express版本,需要再安装Windows SDK, Server 2003 R2 Platform SDK下载地址为:?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en3. 安装CMake(Windows版本),下载地址:, 旧版本可能不支持生成VS2005解决方案,推荐用最新版本。注意:安装路径最好为英文,并且不要有空格。安装后将bin路径添加到系统环境变量。4. 安装GNUWin32 Bison,下载地址为:, 同样安装路径最好为英文,并且不要有空格。安装后将bin路径添加到系统环境变量。5. 安装CygWin,下载地址为:, 选择模块时要选上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 enginesWITH_PARTITION_STORAGE_ENGINEWITH_ARCHIVE_STORAGE_ENGINEWITH_BLACKHOLE_STORAGE_ENGINEWITH_EXAMPLE_STORAGE_ENGINEWITH_FEDERATED_STORAGE_ENGINE__NT__ Enable named pipe supportMYSQL_SERVER_SUFFIX=<suffix> Server suffix, default noneCOMPILATION_COMMENT=<comment> Server comment, default "Source distribution"MYSQL_TCP_PORT=<port> Server port, default 3306CYBOZU Default character set is UTF8EMBED_MANIFESTS Embed custom manifests into final exes, otherwise VSdefault will be used. (Note – This option should only beused by MySQL AB.)WITH_EMBEDDED_SERVER Configure solution to produce libmysqld.dlland 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.XCopyright (C) Microsoft Corporation XXXX-XXXX. All rights reserved.done!3. 创建VS解决方案,在MySQL源文件Win目录下有一些批处理:build-vs71.bat VS2003build-vs8.bat VS2005build-vs8_x64.bat VS2005,编译出64bit MySQLbuild-vs9.bat VS2008build-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

只有经历过地狱般的折磨,才有征服天堂的力量。

mysql 在 VS2005上面单步调试

相关文章:

你感兴趣的文章:

标签云: