Memo/PHP

Xdebugでスタックトレース

特徴

Xdebug http://www.xdebug.org/index.php

他のデバック/プロファイリングソフトは以下がある模様。

名前価格説明
Zend Studio41,000円PHP開発元
apd無償Windowsではコンパイルが必要
PHP Dyn無償Windowsではコンパイルが必要

WinCacheGrind

インストール

Windows

  1. phpをダウンロード PHP For Windows: Binaries and sources Releases php 5.3.8 VC9 x86 Thread Safe
    • php-5.3.8-Win32-VC9-x86.zip
  2. xdebugをダウンロード Xdebug: Downloads
    • php_xdebug-2.1.2-5.3-vc9.dll
  3. c:\php\ext\にコピー
    C:\php\ext\php_xdebug-2.1.2-5.3-vc9.dll
  4. c:\php\php.ini に追加。ログの保存場所は適当に
    [XDebug]
    zend_extension=c:\\php\\ext\\php_xdebug-2.1.2-5.3-vc9.dll
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="D:\\temp"
    xdebug.profiler_output_name = xdebug.%s
  5. モジュールが有効かの確認
    c:\> php -m | find "Xdebug"
    Xdebug
  6. 以後phpを実行すると、ログが出力される。実行後は速度が落ちるのでプロファイル終了後は、「xdebug.profiler_enable=0」にしておく

Linux

yum install php-devel php-pear

pecl install xdebug
cat >> /etc/php.d/xdebug.ini << 'EOS'
zend_extension=/usr/lib/php/modules/xdebug.so
xdebug.profiler_enable=0
EOS
service httpd graceful

確認

apacheの再起動。
phpinfo();で確認する。

<? phpinfo(); ?>

「xdebug」の項目が表示されていればOK。
trigger_error();でスタックトレースが表示されれば成功。

デバック時にGET, POST, SESSION等の情報も表示する

php.iniに以下の行を追加する。
apacheを再起動。

	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	; for Xdebug
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	;xdebug.dump.COOKIE
	;xdebug.dump.ENV
	;xdebug.dump.FILES
	xdebug.dump.GET=*
	xdebug.dump.POST=*
	;xdebug.dump.REQUEST
	;xdebug.dump.SERVER
	xdebug.dump.SESSION=*

プロファイル情報を出力する

php.iniに以下の行を追加する。
c:/php/xdebug/ディレクトリを作成。
apacheを再起動。

echo "xdebug.profiler_enable = 1" >> /etc/php.d/xdebug.ini
service httpd graceful

で、phpプログラムを実行すると、「C:\PHP\xdebug\xdebug_1106716852_3456.txt」のようなファイルができます。
実行された関数名とそれにかかった時間等の情報が出力されます。

	Execution Time Profile (sorted by execution time)
	-----------------------------------------------------------------------------------
	Time Taken    Number of Calls    Function Name    Location
	-----------------------------------------------------------------------------------
	0.0033779144    1    *{main}()    c:\user\www\htdocs\php\phpinfo.php:0
	0.0032899380    1    phpinfo()    c:\user\www\htdocs\php\phpinfo.php:2
	-----------------------------------------------------------------------------------
	Opcode Compiling:                             0.0023498535
	Function Execution:     0.0032899380
	Ambient Code Execution: 0.0876271725
	Total Execution:                              0.0909171104
	-----------------------------------------------------------------------------------
	Total Processing:                             0.0932669640
	-----------------------------------------------------------------------------------
	End of function profiler

特定の部分のプロファイルを出力する

特定の部分のプロファイリングをするには、xdebug_start_profiling()、xdebug_stop_profiling()を使用する。

xdebug_start_profiling();
// 処理...
xdebug_dump_function_profile(); // 2つのテーブルで表示。
echo "<pre>";
var_export(xdebug_get_function_profile()); // プロファイル情報を配列で返す
xdebug_stop_profiling();

アナライザ

リンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38