lldbでタブ補完が使えなかったので使えるようにした
はじめに
最近 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はビルドされたバイナリを以下からダウンロードしたものを使用していました。
タブ補完は非対応?
検索したら以下のメーリングリストの返信が見つかりました。
ビルドオプションで有効にできる
ツイッターで検索したら以下のようなコメントが見つかりました。
ソースからビルドするときにオプションの指定をすれば
タブ補完が使えるようになるようです。
ソースからlldbをビルドしてみる。
ビルド手順については公式サイトの以下の参考に実施
実際にビルドした時に追加したオプションは以下
(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