2024年09月01日

MSYS2 版 MinGW-w64の gdb を使う方法

 wxWidgets によるプログラミングは細々と続けています。制作は主に Mac/Xcode 上で行い、動くようになったらクロスコンパイラで Windows 32bit/64bit 版をそれぞれ作成し、VMWare 上の Windows で動作確認する、という流れです。クロスコンパイラ(mingw-w64)の環境整備は以前に書きました:「Mac OS 10.14 で wxWidgets 開発(その1)」「(その2)」。

 Windows 上の開発環境は、MSYS2 版の mingw-w64 です。以前はこの環境で Windows 用バイナリをビルドしていたのですが、Mac 版の mingw-w64 によるクロスコンパイルが十分に実用的なので、現在はビルドシステムとしては使っていません。

 ただ、デバッグの環境は、どうしても Windows 上でやらないといけないのです。そこで、MSYS2 のターミナルを開いて、そこで gdb を立ち上げていました。

20240901-1.jpg

 wxWidgets 関係のプロジェクトをまとめたフォルダ wxMyProjects を VMWare で共有しています。これは Windows 上では z:wxMyProjects としてアクセスできますが、実際に cd すると //vmware-host/Shared Folders/wxMyProjects という名前になります。途中に半角スペースが入っているのが絶妙にウザいのですが、まあ今のところ大きな実害はないようです。

 ブレークポイントを設定したいのですが、Mac と Windows でフォルダの構成が違うので、ソースコードが見つかりません。これは、ホームディレクトリの .gdbinit ファイルに下のように指定することで、解決できます。substitute-path の次に書くのが Mac 上でのフォルダパス、その次に書くのが Windows 上でのフォルダパスです。なお、MSYS2のホームディレクトリは、MSYS2のインストールディレクトリの中の home/ユーザー名 というディレクトリです。

set substitute-path /Users/nagata/Development/wxMyProjects z:/wxMyProjects

 これでソースコードデバッグができるようになります。

20240901-2.jpg

 走っている Windows プログラムを止めて GDB に制御を移すには、F12 を押します。VMWare 上の Windows でもちゃんと機能しました。

20240901-4.jpg

 一応これでデバッグ作業はできるのですが、一つ大きな問題があります。MSYS2 のターミナルと GNU readline の相性が悪くて、タブ補完やヒストリ機能がまるっきり使えないのです。これは作業効率を著しく落とします。また、gdb が「y or n」で聞いてくるところをスキップされることもあります。例えば、プログラム動作中にブレークポイントで止めて、そのまま GDB を終了させると、普通は「y or n」で確認を求められるのですが、この環境だと問答無用で Yes と答えたことになってしまいます。「ハイかYesで答えなさい」ってやつかよ。「input not from terminal」とか言ってますけど、こっちはターミナルのつもりなんですが……

20240901-3.jpg

 これを回避するため、いろいろ調べたのですが、実は解決法は簡単でした。MSYS2 のターミナルじゃなくて、Windows の PowerShell を使えばいいのです。

20240901-5.jpg

 背景色が邪魔で一部情報が読めなかったりしますが、これは設定を変えればいいだけなので、大きな問題ではありません。

 PowerShell で MSYS2 のコマンドを使うためには、パスを通しておく必要があります。スタートメニュー→設定→システム→詳細情報(左の列の一番下)→システムの詳細設定→環境変数→ユーザー環境変数の Path を選んで編集→ C:\msys64\mingw64\bin\ を追加、という手順です。これはスクリーンショットで説明するほどでもないでしょう。

 emacs の GDB モードも使えることがわかりました。

20240901-6.jpg

 ソースコードが表示できます。画面上でブレークポイントの設定もできます。ただ、PowerShell 上の gdb に比べると、動作がかなり遅いので、常用するには厳しいかなと思っています。ソースコード自体は Xcode で見ればいいしね。

20240901-7.jpg

Posted at 2024年09月01日 01:14:44
email.png