gdbとは

linuxには標準でインストールされているデバッガです。gdbでPHPをデバッグする方法についてこちらのページで詳細に説明してあったので試しにやってみました。

gdbの使い方

gdbがlinuxにインストールされていれば、やり方はとっても簡単です。まずはgdbを起動。gdbコンソールが立ち上がってくれます。

>gdb
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".
(gdb)

起動後は、PHPをコアファイルからコマンドで読み込みます。

(gdb) file /usr/local/php5/bin/php

デバッグしてみたいファイルをrunで走らせればOKです。Pathは絶対パスで指定して下さい。

(gdb) run /www/htdocs/index.php

問題が無ければ、こんな感じで終わってくれます。

Program exited normally.
(gdb)

デバッグで判明したバグ

dtn.jpのインデックスPHPでやってみたところ、inlude()やrequire()でファイルを読み込んでいるあたりに、相対パスのままで指定してしまっているところが多々あり、エラーを吐き出してくれていました。

相対パスのままでもPHPがファイルを探し回ってくれているため、プログラム的には問題なく動いてしまいますが、けっこうな負荷はかかってたと思います。gdbデバッガ流石ですね。

PHPのinclude()の動き

PHPのinclude()の動きについてはこちらをご参照どうぞ。現在参照中のファイルのフルパス+ファイル名で、パスをきっちり書き直しておきました。

include(dirname(__FILE__) . "/etc/function.php");

おわりに

少ないプロセスは大切に使わないといけませんね。