MySQLをWindows(WSL)上でデバッグする環境を手に入れた(せじまさんの記事がすごい)

 WindowsのWSL上でMySQLをビルドし、VSCodeを使ってデバッグする方法を、せじまさんが公開してくださいました。
labs.gree.jp

私のこのエントリは、せじまさんの記事を読みながら実際に試してみた際に、考えたこと、苦労したこと、ちょっと変えてみたことなどの記録です。一番言いたいことは「せじまさんの記事すごい!リンク先ぜひ見て、ぜひ試してみて!」ですので、実際にやられる方はリンク先をご覧ください。
 リンクを貼った記事だけでなくその前後の記事も、少し異なる環境への対応がまとめられているので、参考になると思います。

私のスペック

  • Windows 10 Pro/20H2
  • i7-7770K
  • Memory: 32GB
  • WSL1 後に WSL2
  • WSL1 上に Ubuntu 29.94 環境インストール済
  • Visual Studio インストール済

WSL 環境(WSL2にしましょう)

 せじまさんの記事では WSL2 でということでしたが、私は WSL1 の環境で作業を始めました。大部分の工程をWSL1上で実施できましたが、最後の、VSCodeが起動された後に、どうしてもブレークポイントで止まらない、という事象に遭遇しました。そこで WSL2 にしたらブレークポイントで止まるようになったので、たぶん最初から WSL2 にしておくのが吉だと思います。


WSL1 から WSL2 への変更方法

 私がやったのは、以下の手順です。

  • PowerShellを 管理者として実行
  • PowerShell上で以下のコマンドを順次実行
    • wsl --set-default-version 2
    • wsl --list --verbose
      • で作成済みイメージのWSLバージョンを確認。私はubuntu-20.04を2にしたいので以下
    • wsl --set-version Ubuntu-20.04 2

gdb が必要

 私の環境にはまだ入れていなかったので、インストールしました。
記録取っていないのだけど、たぶん普通に

$ sudo apt-get install gdb 

とかやったのだと思う。

make オプションを少し変えてみた&メモリの使われ方

 せじまさんの記事では、make時にかなりメモリが使われるので、-j 4 のように絞ったほうがいいよ、とのことでしたが、私はとりあえずチャレンジングな心で "4" 指定なし(-jのみ)でmake実行して、無事最後まで通りました。
 タスクマネージャでメモリ使用量を目視していたところ、使用量の増減は結構あり、特に、進行82%くらいで20GB、84%付近で26GBくらい使用されたのがピークでした。(makeが終わったとき=常時=の使用量は9GB程度)

VSCode関連

 WSL[12]上の Ubuntu から、VSCodeを立ち上げることができるという事を知りませんでした。これすごい。指定したフォルダの情報を以て、VSCodeが立ち上がってくれるのですね。
 VSCode起動前に、launch.json と c_cpp_properties.json の2つのファイルを作成(せじまさんの記事からコピペ)する必要があるところ、私のポカで1つしか作らずにハマりました。ちゃんと読んで2つ作りましょう。

ブレークポイント

 とりあえずブレークポイントのお試しをするには、do_command() 関数(sql_parse.cc)が便利です。
F5を押してサーバを立ち上げた後、私は VSCode内の「ターミナル」で、mysqlコマンドを実行しました。

$ cd ~/mysql/mysql-8.0.25\bld
$ ./bin/mysql -uroot -p

 MySQLサーバに接続した「ターミナル」内で 適当なSQLコマンドを打つと、ブレークポイントで止まりました。あとは F10/F11 などを駆使して楽しめます。

まとまらないまとめ

 素晴らしい記事を公開してくださったせじまさんに、大大感謝です!
Windows上での MySQLビルドの際には、事前にソースコードにBOMを付ける作業が必要など、日本語環境では一手間ハードルがあったのですが、WSL2上での実施は、驚くほどスムーズでした(せじまさんが設定ファイル類を公開してくださっているおかげなのですが)。
 これで、私も久々に手元でのMySQLビルド&デバッグ環境が手に入ったので、さしあたって、@yoku0825 さんが作ってくれた PLEASE句パッチでも当てて遊んでみることにしますかね。



f:id:sakaik:20210524012009p:plain