🚜

lldbでタブ補完が使えなかったので使えるようにした

2021/05/05に公開

はじめに

最近 clang を使用していて、デバッガlldbも使用していました。
なのですが、lldbのコマンドのタブ補完ができなくて困っていたので、対処してみました。

なぜ使えないのか?

このページ
以下のような記載があるので使えるように思っていました。

lldb also supports command completion for source file names, symbol names,
file names, etc. Completion is initiated by a hitting a TAB.

なのに自分の環境では使えない。。。
使用している環境は以下でした。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

使用している clang, lldbはビルドされたバイナリを以下からダウンロードしたものを使用していました。

https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.0

タブ補完は非対応?

検索したら以下のメーリングリストの返信が見つかりました。

https://lists.llvm.org/pipermail/lldb-dev/2017-January/011876.html

ビルドオプションで有効にできる

ツイッターで検索したら以下のようなコメントが見つかりました。

https://twitter.com/hanaguro/status/1342077878926626816?s=20

ソースからビルドするときにオプションの指定をすれば
タブ補完が使えるようになるようです。

ソースからlldbをビルドしてみる。

ビルド手順については公式サイトの以下の参考に実施

https://lldb.llvm.org/resources/build.html

実際にビルドした時に追加したオプションは以下
(DLLDB_ENABLE_PYTHONはいらなかったかも)

$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project/
$ git checkout release/12.x 
$ mkdir build
$ cd build
$ cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;lldb" \ 
-DLLDB_ENABLE_LIBEDIT=1 \
-DLLDB_ENABLE_CURSES=1 \
-DLLDB_ENABLE_PYTHON=1 ../lldb
$ ninja lldb

ビルド後、binディレクトリにlldbが作成されました。

$ ls bin
lldb  lldb-argdumper  lldb-dotest  lldb-repro lldb-tblgen

作成された lldbを実行したらタブ補完が使えるようになっていました。

実行時にエラー

タブ補完が使えてホッとしていたのですが、今度は
デバッガ実行時に以下のようなエラーが出てしまいました。。。

(lldb) run sample
error: unable to locate lldb-server
(lldb)

これは先程ビルドしたbinディレクトリに
ここにある
ビルド済のlldb-serverをダウンロードして、シンボリックリンクを作成したら
エラーは出なくなりました。

$ ln -s <PATH_TO_LLDB-SERVER>/lldb-server  lldb-server

まとめ

lldbのタブ補完はビルド済のバイナリでは有効ではないみたい。
有効にするにはソースからビルドする必要がある。

Discussion