PHP

【PHP】バックトーレス(呼び出し階層)をデバッグ出力する方法

投稿日:2016年10月12日 更新日:

PHPでバックトレースを出力する方法について解説します。

バックトレースというのは、呼び出し階層のようなものです。
エラーが発生した時に、何行目でエラーが発生してどのようなルートでメソッドが呼び出されていったかが表示されますよね。

そのバックトーレスをエラーが発生していない時に出力する方法です。

2パターンの方法をご紹介します。

スポンサーリンク

debug_print_backtrace()で呼び出し階層を一発出力

特に理由がなければ、簡単なこちらの方法が良いでしょう。

PHP標準で用意されているdebug_print_backtrace()を使います。

バックトレースを出力したい箇所で、debug_print_backtrace()をコールすればOKです。

下記のようなテキストが出力されます。

#0 c() called at [/tmp/include.php:10]
#1 b() called at [/tmp/include.php:6]
#2 a() called at [/tmp/include.php:17]
#3 include(/tmp/include.php) called at [/tmp/test.php:3]

リファレンスはこちら
debug_print_backtrace()リファレンス

とても簡単ですね。

特に理由がなければdebug_print_backtraceで十分でしょう。

カスタマイズしてクラス名・関数名・引数の値も出力できる

もう1つの方法は、少し手間をかけて出力する形式を自由にカスタマイズする方法です。

debug_backtrace()というメソッドは、バックトーレスの情報を配列で返します。
この情報を利用して、自由な形式で出力させます。

debug_backtrace リファレンス

自由な形式といっても実装するの面倒ですよね。笑

ということでサンプルを用意しました。
これをもとに自由にカスタマイズしてお好みの形式出力出来るかと思います。

このサンプルコードでは、下記の情報をバックトーレスから取得して出力しています。

  • ファイル名
  • 行数
  • クラス名
  • 関数名
  • 関数の場合は引数

サンプルコード

    function print_debugtrace($printArgs = false) {
    	$dbg = debug_backtrace();
    	for ($i = 0; $i < count($dbg); $i++) {
    		echo $i . ")";
    		echo $dbg[$i]['file'];
    		echo "(" . $dbg[$i]['line'] . ")";
    		echo ":" . $dbg[$i]['class'];
    		echo $dbg[$i]['type'];
    		echo $dbg[$i]['function'];
    		echo "<br>";
    		
    		// 引数出力
    		if ($printArgs) {
    			echo "<div style='margin-left: 1.0em;'>";
    			print_r($dbg[$i]['args']);
    			echo "</div>";
    			echo "<br>";
    		}
    	}
    }

出力結果サンプル

0)/test/test.php(44):Test->print_debugtrace
Array ( [0] => 1 )
1)/test/index.php(27):Index->init
Array ( )

まとめ:バックトーレス(呼び出し階層)はデバッグに役立つ

PHPでバックトーレスを出力する方法でした!

複雑なシステムだと、これどこから呼び出されてんだ!?
って事もありますよね。

この方法で呼出階層を辿れば解析も捗ります。

更に解析を捗らせたいなら、Xdebugを利用してデバッグ設定をするのもオススメです。
ステップ実行出来たり、変数の中身を見たり出来るようになるのでデバッグ作業が断然捗りますので!

最後までお読み頂きありがとうございました!

スポンサーリンク


-PHP

執筆者:

関連記事

RewriteEngine onで403エラーの解決方法

ローカル環境でRewriteEngine onにしたら、403エラーが発生。 その解決方法の解説です。 スポンサーリンク 目次環境についてFollowSymLinksを有効にする事で解決まとめ 環境に …

【現役エンジニアがオススメ】『いきなりはじめるPHP』はプログラミング入門に最適

こんにちは!DENです。 PHPの入門書『いきなりはじめるPHP』が、なかなか良い本だったのでご紹介します。 いきなりはじめるPHP posted with ヨメレバ 谷藤賢一 リックテレコム 201 …

PhpStorm&MAMP環境のデバッグ(Xdebug)の設定方法

Phpstorm&MAMPP環境でデバッガー(Xdebug)を使えるようにする手順の説明です。 面倒ですけど、デバッガーを設定すると開発がめちゃくちゃ捗りますよ! デバッグ用にダンプ出力したりしている …

【EC-CUBE】CSV出力設定「出力設定リストが入力されていません」エラーで登録できない件の修正方法

EC-CUBE2で作ったサイトのお客様から、CSV出力設定の登録が出来ないとの連絡が。 CSV出力する項目を設定しているにもかかわらず、「※ 出力設定リストが入力されていません。」とエラーになり登録出 …

EclipseからPhpStormへ乗り換える時に行った事

こんにちは! DENです! 僕はもともとJavaエンジニアだったので、PHPの開発ももっぱらEclipseです。 もう10年近くEclipseを使っています。 使い慣れたIDEで不満もなく使っていまし …

プロフィール

このサイトを運営しているDENです。
アングラーのフリープログラマー。 主にプログラミングと釣の話を発信しています。
プログラミングで自由になり思う存分に釣りをしまくる生活実践中。
詳しいプロフィールはこちら 
フォスターフリーランス