GNU socialのDBエラーのデバッグ方法
以前,「GNU social v2.0-devでのホーム画面へのアクセス時のDBエラーの対処」を書いた。その後,GNU socialのissueにDBエラーについて登録された。
GNU socialでDBエラーが発生すると以下のようなメッセージが表示される。
Database error: DB Error: unknown error
しかし,これだけだと情報が少なく,原因がわかない。
その際に,DBエラーのデバッグ方法として前回の記事が参考になったので,今後のためにDBエラーのデバッグ手順を整理する。
以下の4ステップでDBエラーをデバッグできる。
1. xdebug
拡張機能をインストール (pecl install xdebu
)
2. 以下の設定をphp.ini
に記入して,xdebug
を有効化
zend_extension = xdebug
xdebug.default_enable = true
xdebug.force_display_errors = 1
xdebug.force_error_reporting = 1
xdebug.collect_params = 4
3. デバッグ文 (xdebug_print_function_stack('Your own message');
) をextlib/DB.php
の以下に挿入
function __construct($code = DB_ERROR, $mode = PEAR_ERROR_RETURN,
$level = E_USER_NOTICE, $debuginfo = null)
{
xdebug_print_function_stack('Your own message'); // Insert here
if (is_int($code)) {
parent::__construct('DB Error: ' . DB::errorMessage($code), $code,
$mode, $level, $debuginfo);
} else {
parent::__construct("DB Error: $code", DB_ERROR,
$mode, $level, $debuginfo);
}
}
4. DBエラーを発生させて詳細な情報をスタックトレースと共に表示
xdebugにより,DBエラー発生直前のスタックトレース及び,実行SQLが分かるため,原因を特定しやすくなる。
GNU socialに限らず,PHPのデバッグにはxdebugを活用して,効率的な開発を実現したい。