首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Win7 + VS2010 編譯調試 MySQL 5.6 源碼完整實戰筆記(含踩坑避雷)

     編輯:MySQL 綜合教學

Win7 + VS2010 編譯調試 MySQL 5.6 源碼完整實戰筆記(含踩坑避雷)

為深入理解 MySQL 內核機制,嘗試在 Windows 7 64 位 + Visual Studio 2010 環境下從源碼編譯 MySQL 5.6.19。過程中遇到諸多環境依賴與編譯錯誤,網上教程多不全或版本不符,特整理此實戰文檔供後人參考。

1. 環境準備(關鍵:路徑無中文、無空格、無特殊字符)

工具版本/文件安裝建議路徑
OSWin7 SP1 x64—
IDEVS2010 (VS2013 也測試過)D:\VS2010
MySQL 源碼mysql-5.6.19.zip (Source Code)D:\mysql\mysql-5.6.19
PerlActivePerl-5.16.3.1604-MSWin32-x64-298023.msiC:\Perl64
CMakecmake-3.0.0-win32-x86.exeC:\CMake
Bisonbison-2.4.1-setup.exeC:\GnuWin32
必須將上述工具的 bin 目錄加入系統環境變量 PATH(如 C:\CMake\bin、C:\GnuWin32\bin、C:\Perl64\bin),驗證:cmake --version、bison --version、perl -v 均正常輸出版本號。

2. CMake 生成 VS 解決方案

cd D:\mysql\mysql-5.6.19
mkdir bld
cd bld
cmake ..

過程中會出現一些 NOT FOUND 警告(如 curses、某些庫),不影響生成 MySQL.sln。關鍵成功標誌:控制台輸出 Configuring done、Generating done、Build files have been written to: D:/mysql/mysql-5.6.19/bld。

CMake 輸出 生成成功標誌

3. 源碼編碼修正(UTF-8 with BOM)

CMake 生成的部分 .c/.h 文件編碼導致 VS 編譯報警告/錯誤。批量用 Notepad++ 將 bld 目錄下所有源文件轉存為 UTF-8 帶 BOM 格式。

文件編碼修改

4. 關鍵代碼微調:mysqld.cc 中的 DBUG_ASSERT

編譯時 sql\mysqld.cc 的 test_lc_time_sz() 函數觸發 DBUG_ASSERT(0) 導致斷言失敗。將其改為 DBUG_ASSERT(1) 繞過(僅影響調試斷言,不影響功能)。

5. VS2010 編譯與常見錯誤修復

  • 打開 MySQL.sln,選 Debug 配置,Build Solution。
  • LNK1123 錯誤:fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt。原因:.NET 4.0 的 cvtres.exe 與 VS2010 衝突。解決:刪除/重命名 D:\VS2010\VC\bin\cvtres.exe(或將 VS2010 的 cvtres.exe 複製覆蓋 .NET 目錄下的同名文件)。
  • 其他 C++ 編譯器嚴格性導致的警告可暫時忽略。

6. 調試啟動配置

  1. 右鍵 mysqld 項目 → Properties → Debugging → Command Arguments 填 --console。
  2. Set as StartUp Project,按 F5 啟動調試。
  3. 控制台顯示 mysqld: ready for connections 即成功。

調試參數 啟動實例 控制台輸出

7. 客戶端連接驗證

cd D:\mysql\mysql-5.6.19\bld\client\Debug
mysql.exe -u root -p
-- 直接回車,無密碼登錄,執行 SHOW DATABASES; 驗證

客戶端連接

總結

至此完成 Win7+VS2010 下 MySQL 5.6 源碼編譯、調試環境搭建。後續可在 sql/、storage/innobase/ 等核心模塊下斷點跟蹤查詢執行、事務鎖、B+樹操作等流程。關鍵避坑點:工具鏈路徑純 ASCII、CMake 生成後源碼統一 UTF-8 BOM、VS2010 cvtres.exe 衝突。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved