iPhone/iPadのホーム画面コンテスト開催中!賞品は iTunes カード!

PHP 2008/06/16 23:48

debug_backtraceを見やすくしたdebug_print_backtrace_source

debug_bracktrace()は手軽にバックトレースが取れるので便利です。

メソッド(関数)の呼び出し順だけではなく、引数の内容や現在動作しているオブジェクトの状態なども取得することができます。

そこでこれらを利用してバックトレースの内容を見やすくしたdebug_print_backtrace_source()を作ってみました。

ダウンロード

debug_print_backtrace_source.php

dBugを内包しているのでライセンスはGPLで。

使用方法

debug_print_backtrace_source.phpを読み込んで、debug_print_backtrace_source()もしくは、dpbs()を実行するだけです。

PHP:
  1. <?php
  2. require_once('debug_print_backtrace_source.php');
  3. debug_print_backtrace_source();
  4. // 省略するなら
  5. // dpbs();

引数は2つでどちらもbooleanです。第1引数でバックトレース表示後に処理をexitするか否かを、第2引数でバックトレースを逆順で表示するか否かを指定します。指定しない場合はどちらもfalseが有効となります。

PHP:
  1. <?php
  2. dpbs(true); // exitする
  3. // 以下実行されない

PHP:
  1. <?php
  2. dpbs(false, true); // exitしない、逆順で表示

表示の見方

a. ファイルパス、行番号、クラス名、メソッド名
b. 現在のインスタンス情報(クリックすれば展開)
c. バックトレース行
d. 引数(クリックすれば展開)

実装した機能

実装した機能は以下です。

  1. ソースコードを表示(前後10行)
  2. バックトレースの内容を並べた
  3. 現在のクラス・メソッド(関数)・オブジェクトの内容では次のトレース内容を表示

1. ソースコードを表示

バックトレースで指し示している箇所前後10行のソースを表示します。これが一番実装したかった機能です。実際にトレースで指定されている行は背景色を変えています。

2. バックトレースの内容を並べた

debug_backtraceでは多くの情報が取れるのでそれらを視認しやすいように並べました。

現在のオブジェクトとメソッド(関数)引数の表示では、dBugを一部変更して使用しています。

3. 現在のクラス・メソッド(関数)・オブジェクトの内容では次のトレース内容を表示

バックトレースの内容では、ファイルパス・行番号とクラス名・メソッド名・現在のオブジェクトがずれているので若干把握しづらくなっています。ですので見やすいように後者については次のトレースの値を表示しています。

ちなみに「ずれている」というのは、バックトレースとしては問題ありません。単に見やすいようにした、というだけです:-D

フレームワークで使うと良いかも

フレームワークのようにクラス構造が複雑で、メソッドの呼び出しが深くなりがちなシステムでは、メソッドの呼び出し履歴が見やすくて便利だと思います。フレームワークのソースを読む時のお供にどうぞ。



■Related Posts

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply