LoginSignup
21
20

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-31

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 を開いてるポートに変更して対応します。

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20