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を活用して,効率的な開発を実現したい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です