🔍

指先一つで立ち上げるD言語デバッグ環境

2022/03/19に公開

注意: この記事は「D言語で書かれたプログラムのデバッグ環境」の話ではなく、「D言語処理系のデバッグ環境」の話です。

皆さんもD言語のリグレッションと戦ってますよね!
単一のリポジトリだと git bisect を利用して原因を調査できますが、コンパイラと標準ライブラリなどの複数リポジトリの組み合わせが原因の場合には git bisect での調査が困難です。

D言語の場合は、特定時点(e.g., v2.099.0 時点、2022/1/1 時点)の dmddruntimephobos の組み合わせを再現する 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

前提条件

残念ながら、いくつかのソフトウェアはまだ自分でインストールする必要があります。敗北感に苛まれながら以下を各自でインストールしてください。

どうやるの?

  • 以下の 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., 6b1f7dbce5f3812c73)。このリポジトリのコミット内容から、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
        

で、デバッグは?

このリポジトリでできるのは bisect するところまでです!あとは任せた!

参考

脚注
  1. デフォルトだと /workspaces/digger 以下に環境を構築します。/workspaces/digger/result/bin にパスが通っているため、digger build 後にすぐに dmd を利用できます。 ↩︎

  2. こちらのスクラップで教えてもらいました。Thx @e10s! ↩︎

Discussion