michihide's blog

技術メモおよび雑感

phpdbgでコアダンプ

最近はもっぱら、CentOS 6.x/7.x では phpリポジトリとして https://webtatic.com/ を使わせてもらっています。ここは最新版への追随が早いので助かります。

ただ今回、phpdbg を使おうとしたらちょっとハマったのでメモ。 ちなみに OS は CentOS 7 です。

環境はこんな感じです。早速動かしてみました。

m-hotta@MYHOST:~$ rpm -qf /usr/bin/phpdbg
php56w-phpdbg-5.6.6-1.w7.x86_64
m-hotta@MYHOST:~$ phpdbg
[Welcome to phpdbg, the interactive PHP debugger, v0.4.0]
To get help using phpdbg type "help" and press enter
[Please report bugs to http://github.com/krakjoe/phpdbg/issues]
phpdbg> quit
Segmentation fault (コアダンプ)

コマンドに何を入れてもコアダンプ(詠み人知らず)。

しかたがないので、ソースを入れて探ってみます。

m-hotta@MYHOST:~$ sudo yum install php56w-debuginfo
m-hotta@MYHOST:~$ gdb -c core.26476
(gdb) bt
#0 0x00007faaf36437d1 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1 0x00007faaf5b7bd76 in alloc_history_entry () from /lib64/libreadline.so.6
#2 0x00007faaf5b7bf7f in add_history () from /lib64/libreadline.so.6
#3 0x00007faaf6720102 in phpdbg_read_input (buffered=buffered@entry=0x0) at /usr/src/debug/php-5.6.6/sapi/phpdbg/phpdbg_cmd.c:773
#4 0x00007faaf6714252 in phpdbg_interactive () at /usr/src/debug/php-5.6.6/sapi/phpdbg/phpdbg_prompt.c:1003
#5 0x00007faaf64c4fab in main (argc=1, argv=0x7fff2540b3a8) at /usr/src/debug/php-5.6.6/sapi/phpdbg/phpdbg.c:1446
m-hotta@MYHOST:~$ sed -n '772,774p' /usr/src/debug/php-5.6.6/sapi/phpdbg/phpdbg_cmd.c
if (!(PHPDBG_G(flags) & PHPDBG_IS_REMOTE)) {
add_history(cmd);
}

readline 周りでおかしくなっているようです。 Github で issues をざっと見てみましたが、ピッタリ来るものはなさそう。 ただし以下の様なものがあるので、何らか readline がらみで因縁があるのかも。

github.com

諦めて phpdbg だけソースからビルドしてみることに。手順は以下のような感じ。

m-hotta@MYHOST:~$ > sudo yum groupinstall "Development Tools"
m-hotta@MYHOST:~$ > sudo yum install readline-devel libedit-devel libxml2-devel
m-hotta@MYHOST:~$ > cd /usr/local/src
m-hotta@MYHOST:/usr/local/src$ > tar xjf /tmp/php-5.6.6.tar.bz2
m-hotta@MYHOST:/usr/local/src$ > cd php-5.6.6/sapi
m-hotta@MYHOST:/usr/local/src/php-5.6.6/sapi$ > git clone https://github.com/krakjoe/phpdbg
m-hotta@MYHOST:/usr/local/src/php-5.6.6/sapi$ > cd ..
m-hotta@MYHOST:/usr/local/src/php-5.6.6$ > ./buildconf --force
m-hotta@MYHOST:/usr/local/src/php-5.6.6$ > ./configure --enable-phpdbg --with-libedit --with-readline
m-hotta@MYHOST:/usr/local/src/php-5.6.6$ > make -j8
m-hotta@MYHOST:/usr/local/src/php-5.6.6$ > sudo make install-phpdbg
m-hotta@MYHOST:/usr/local/src/php-5.6.6$ > sudo ln -s /etc/php.ini /usr/local/bin

ビルドに成功したら、/user/local/bin/phpdbg ができあがります。

m-hotta@MYHOST:~$ which phpdbg
/usr/local/bin/phpdbg
m-hotta@MYHOST:~$ phpdbg
prompt> help
phpdbg is a lightweight, powerful and easy to use debugging platform for PHP5.4+ It supports the following commands:(略)

これで落ちなくはなったけど、まだ readline が効いている気がしないので、ちょっと微妙。phpdbg の使い方はこれからです。

(2015.03.17 追記)

CentOS6 環境でやったところ、普通に
$ sudo yum install php56w-phpdbg
で入れた phpdbg でちゃんと動くし、readline も効いてます。
CentOS7 だけの問題なのかもしれません。
なお、phpdbg の簡単な使い方は こちらにまとめてあります。