指先一つで立ち上げるD言語デバッグ環境
注意: この記事は「D言語で書かれたプログラムのデバッグ環境」の話ではなく、「D言語処理系のデバッグ環境」の話です。
皆さんもD言語のリグレッションと戦ってますよね!
単一のリポジトリだと git bisect
を利用して原因を調査できますが、コンパイラと標準ライブラリなどの複数リポジトリの組み合わせが原因の場合には git bisect
での調査が困難です。
D言語の場合は、特定時点(e.g., v2.099.0 時点、2022/1/1 時点)の dmd、druntime、phobos の組み合わせを再現する Digger が提供されているため、これを使って調査ができます。
公式サイトにあるように、Digger の利用にはいくつかのビルドツールのインストールが必要です。
On POSIX, Digger needs git, g++, binutils and make. gcc-multilib and g++-multilib or equivalent are required for targeting x86 on x86_64 systems.
しかし VSCode の remote container に飼い慣らされてしまうと、ビルドツールのインストールすらめんどくさい。
なんかガッとやったらいい感じに Digger が使えるようになってほしい。
なので使えるようにしました!: https://github.com/tom-tan/dlang-digger-for-vscode
前提条件
残念ながら、いくつかのソフトウェアはまだ自分でインストールする必要があります。敗北感に苛まれながら以下を各自でインストールしてください。
- Visual Studio Code
- Remote - Container extension (VSCode の拡張)
- git
- Docker (Docker for mac、Docker for Windows などでもいけるはず)
どうやるの?
- 以下の URL にアクセスします
- ローカルにリポジトリを clone する
- VSCode から
Remote-Containers: Open Folder in Container...
(画面左下の><
みたいなボタンから選択できる) を使い、clone したリポジトリを開く - できあがり!
- VSCode の新規ターミナルから
digger build v2.099.0
などを実行すると、指定したバージョンの環境を構築できます[1] - あとは
bisect.ini
を用意してdigger bisect bisect.ini
を実行すれば、問題が起きたコミットを特定できます。- 単一リポジトリでの変更が原因の場合、Github のリポジトリ 中の該当コミットとコミットメッセージが出力されます。
- dmd と druntime などの組み合わせが原因の場合には以下のような出力になりますが、これらのコミット番号は Github のリポジトリ での番号とは異なるので注意が必要です。これらの番号は Bitbucket で管理されている dmd や druntime などを全てまとめたリポジトリでのコミット番号に対応しています[2](e.g., 6b1f7dbce と 5f3812c73)。このリポジトリのコミット内容から、Github のリポジトリでの該当コミットがわかります。
... digger: The first bad commit could be any of: 6b1f7dbce 2022-02-14 10:11:00 +0100: dmd: Merge remote-tracking branch 'upstream/master' into stable 5f3812c73 2022-02-14 10:11:09 +0100: druntime: Merge remote-tracking branch 'upstream/master' into stable
- VSCode の新規ターミナルから
で、デバッグは?
このリポジトリでできるのは bisect するところまでです!あとは任せた!
Discussion