PHPのステップ実行方法まとめ

■ 目次

  1. 概要
  2. 準備
  3. ステップ実行方法
  4. 参考
  5. 最後に

■ 概要

PHPのステップ実行方法まとめ
以前Perlのステップ実行方法をまとめましたが今回はPHPについてやり方を調べます

■ 準備

前提

ApacheとPHP、Vimが使える状態とする

以下を用意する

  • XDebug
  • VimプラグインのDBGp
// pecl(,pear)を使うためにinstall
$ sudo yum install --enablerepo=remi --enablerepo=remi-php56 php-pear -y

// xdebugをinstall
$ sudo pecl install xdebug

// ファイルを日付でバックアップ
$ sudo cp -p /etc/php.ini{,.`date +%Y%m%d`}

// php.iniの修正 (echoで出力した内容をそのままファイルに追記する)
$ sudo bash -c 'echo -e "\n[zend]\n; zend xdebug\nzend_extension = \"/usr/lib64/php/modules/xdebug.so\"\nxdebug.remote_enable=On" >> /etc/php.ini'

// バックアップしたファイルとの差分を見る、php.iniに変更が行われたことを確認
$ diff /etc/php.ini /etc/php.ini.`date +%Y%m%d`
1772,1777d1771
<
< [zend]
< ; zend xdebug
< zend_extension = "/usr/lib64/php/modules/xdebug.so"
< xdebug.remote_enable=On // apache restart $ sudo apachectl restart // xdebugが使えるようになったことを確認する $ php -i | grep "xdebug support" xdebug support => enabled

// vimのプラグインをダウンロード
$ wget --content-disposition http://www.vim.org/scripts/download_script.php?src_id=7285
$ unzip debugger.zip
$ mkdir -p ~/.vim/plugin
$ mv plugin/debugger* ~/.vim/plugin

■ ステップ実行方法

テストスクリプトを作成する

<?php
function sum_num ($a, $b) {
    $sum = $a + $b;
    return $sum;
}
$test = 5;
$total = 0;
for($i=0; $i<3; $i++) {
    $total = $total + sum_num($test, $i);
}
print("result: $total\n");

そのファイルをvimで開く
vimで開いた状態で「F5」を押す (macの場合 fn+F5)
(macでfunction keyの操作が旨く行かない場合は以下を参考にする)
MacのGoogleChromeのデベロッパーツールでF11,F12を有効にする方法

「waiting for a new connection on port 9000 for 5 seconds…」
という文面がWindowの下の方に表示されるはずなのでその間に違うコンソールから以下のコマンドを叩く

$ XDEBUG_CONFIG="idekey=DBGP" XDEBUG_SESSION_START=DBGP php test.php

そうすると「F5」を押したほうのvimの画面がデバッグモードになる

使い方について

<F5>: デバッガの起動 / 次のブレイクポイントまで移動
<F2>: ステップインー (関数の中までステップ実行する)
<F3>: ステップオーバー (関数の中までは見ない)
<F4>: ステップアウト (関数の外に出る)
<F6>: デバッガの停止
<F11>: 全ての変数の中身を表示できる
<F12>: カーソル行の変数を表示できる

・任意の行で「:Bp 」とした状態で<F5>を実行するとブレイクポイントを設定できる

・「,e」を押すとWATCH_WINDOWに「/*{{{1*/ => eval:」が表示されてそこに変数を書き込んでエンターを押すと変数の中身が表示される
// 例
/*{{{1*/ => eval: $test
$command = 'eval';
 EVAL_RESULT          = (int) 5;
/*}}}1*/

■ 参考

■ 最後に

PHP 5.4以上から「phpdbg」というものが使えるらしい
PHP 5.6 に採用されるデバッガ phpdbg を使ってみた


Be First to Comment

コメントを残す

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