zshでタブ補完するときに謎の死(Segmentation Fault)をする原因を探ってた
なんかたまにzshでタブ補完するときにsegmentation faultして困っていたのだけど、今日原因がわかったのでメモ。いや原因はわかってないけど解決した。
まず俺は普段から ulimit -c unlimited してるので process が segmentation fault したときは同ディレクトリにcore dumpファイルが生成されるのでそのファイルにgdbしてみた。
しかしデバッグ情報のないzshバイナリだったので原因全くわからず。よしデバッグ情報をつけようと思った。デバッグ情報付きでzshコンパイルするときは
$ ./configure --enable-zsh-debug
したら良いらしい。(※ちなみにこの--enable-zsh-debugがしてるのはCFLAGSに -g つけてるだけっぽい)
しかしこのバイナリでもcore dumpさせてgdbしたときにどのソースコード行でエラーが発生してるかがわからない。どうなっとるねん!!!
nmコマンドでこのバイナリのシンボルを見てみるとちゃんと存在してる。デバッグシンボルあるよなぁ、もしかして間違えて最適化オプション(-O 2とか)つけちゃってたっけーと思って Makefile 見てみるもそんな記述はない。
そこでふと echo $SHELL してみたら /bin/zsh ! 新しいバイナリは /usr/local/bin/zsh。
そもそもデバッグ情報を付けた zsh 起動中にタブ補完をしてなかったというオチ。最新のバイナリだと治ってた。ヨカッたヨカッた。