Netbeansのデバッグ機能をCakePHPで使う

More than 1 year has passed since last update.


echoで変数表示してデバッグはつらい

すぐ始められるデバッグ方法としては、echoやログを使用して怪しい部分にデバッグ用のコードを挿入し、実行→確認 をバグが見つかるまで繰り返す方法がありますが、これは効率が悪い上にけっこう辛いです。


echoでのデバッグ


  1. 処理が怪しい所に当りをつけて、echoで変数等を表示する処理を入れる。

  2. 表示する。

  3. 値は正しかった、違う所が原因だと事が分かる。1に戻る。

    ……


99.原因となる処理を見つける。

(たまに)redirectがあったのを忘れてて表示を見る前にリダイレクトされる。echoでの表示からログファイルの書き込みに変える。


Netbeansでのデバッグ


  1. 処理が怪しい所で実行を一時停止する。

  2. 使用中の変数一覧の値を確認

  3. 処理を1ステップずつ進め、バグの原因となる処理を見付ける。

  4. 終わり。

楽な上に効率も良く、嫌なデバッグ時間を短縮できます。


デバッグ機能を使用するのに必要な環境


  • Xdebugが有効となっているWebサーバ

  • netbeans-connectorが利用可能なウェブブラウザ

  • Netbeansの設定で、xdebugとCakePHPが上手く動くようにする。

の3点です。


xdebug有効・無効の確認と設定

phpinfo() を表示し、xdebugの項目があればすでに有効となっています。

XAMPP環境の場合は、xdebugはインストールされていますが初期状態では無効となっているので、10分でできるXAMPPとXdebugのインストールを参考に、Xdebugを有効にします。

NetbeansでXdebugを動かすには、Xdebugの設定が以下となっている必要があるので、php.iniの該当部分を編集し、webサーバの再起動を行います。


php.ini


xdebug.default_enable = 1
xdebug.remote_enable = on
; xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_autostart = 0
xdebug.remote_connect_back=1

debug.remote_host はXdebugに接続できるクライアントを制限するためのものですが、

LAN環境等、安全が環境であればコメントアウトをおすすめします。


netbeans-connector が利用可能なブラウザ

現在では


  • Chrome

  • Netbeans込み込みのWebKitブラウザ

のみです。Chromeを使用する場合は、こちらから入手します。


Netbeansの設定で、xdebugとCakePHPが上手く動くようにする。

CakePHPはmod_rewriteの機能を使用してブラウザからのアクセスをルータスクリプトに転送しています。Netbeansはこの挙動を自動検出できないため、開始ファイルにルータースクリプトのパスを明示的に指定する必要があります。

プロジェクトを右クリックし、構成→カスタマイズから実行環境を選び、開始ファイルを設定します。


CakePHP2の場合

スクリーンショット 2015-01-31 13.21.44.png

開始ファイルはCakePHPのバージョンで異なるので、バージョンに合わせ、


  • CakePHP2: app/webroot/index.php

  • CakePHP3: webroot/index.hp

をそれぞれ指定します。

また、デフォルトではデバッグを開始する毎に最初に実行したphpプログラムの先頭で一時停止します。

このため、CakePHPを使用していると毎回フレームワーク部分で停止し、効率が悪くなります。

この動作を止める場合は、preferencesz→PHP→デバッグ で「最初の行で停止」のチェックを

外します。


デバッグ実行

デバッグを開始するには、予め一時停止させたい行の行番号をクリックし、ブレークポイントを設定した状態で、「プロジェクトをデバッグ」を押します。これで Xdebugを使用して、NetbeansでCakePHPのデバッグができるようになります。

デバッガの詳しい使用方法は、NetBeans IDEでのPHPソース・コードのデバッグを参照してください。

debug.png


番外 Norton Internet Securityを利用している場合

xdebugで利用するポート9000がNortonでも利用されているため、上記では動作しません。

デバッグ開始時にポートがすでに利用されている旨の警告が出ます。

Netbeansのxdebugポートと、サーバ側のxdebug.remote_port を開いてるポートに変更して対応します。