Windows7 - XDebugインストール (PHPEclipse)


デバッガツール
xDebugのインストール
不具合箇所でプログラムを停止&ステップ実行 めんどくさいerror_log() print_r()の大量バラマキを減らす
※本記事はWindows7 - PHPEclipseインストールの続きです。
本記事を見てXdebugをインストールされる場合はそちらの記事も参考にしてください。
内容が一部重複しているのは「大事なことなので2回言った」と思ってスルーして下さい(笑)
テキストエディタによるPHP開発でありがちな問題
PHP言語の特徴「コンパイルが無い」「型チェックが弱い」「変数宣言が不要」
  1. コンパイルエラーが出ないので単なる変数名/関数名ミスでハマる
  2. ・変数が無かったり意図しない動きでもなんとなく動いてしまい不具合箇所の特定に時間が掛かる
  3. ・実行しないとわからないので実行とコード修正を繰り返し不具合箇所の特定に時間が掛かる
  4. デバッガが無いと不具合箇所の特定ができないので時間が掛かる
いずれもできる限り専門知識が無くてもプログラムができるようにするため曖昧さを許容する仕様となっているのですが、完成度を上げようとするとその曖昧さ故に不具合の原因が特定しにくい現象が出てきてしまうのです。
というわけで前回PHPEclipseのインストールを行いました。
今回はそれにデバッガ(XDebug)を入れて、プログラムを停止&ステップ実行できるようにします。
インストール環境
OSWindows7 Ultimate 64bit(VMWare Fusion3)
マシンiMac 2010 Mid Core i5 760@2.80GHz Mem=12GB(Win6GB,Mac6GB)
HDD1TB(Win545GB,Mac299GB) SSDが欲しいです!
WEBサーバーApache 2.2.21 32bit
PHPPHP 5.3.8 32bit
DBサーバーMySQL 5.5.17 64bit
DB管理ツールphpMyAdmin 3.4.7
統合開発環境Eclipse IDE for C/C++ Version 3.7 Indigo Service Release 1
PHP開発プラグインPHPEclipse 1.2.3
ガンダム初代,Z,ZZ,0083,08小隊,逆襲,F91,V,W,X(18話)


参考サイト Eclipse+PHPEclipse+XDebugで既存PHP Webアプリを開発・デバッグ


XDebugダウンロード XDebug.org
  1. 画面上部[Download]を選択
  2. RELEASES内のdllをを環境に合わせて選択&ダウンロード
  3.  → やすはるラボは「PHP 5.3 VC9 TS (32 bit)」選択しました。(インストールしていたApache/PHP5.3が32bit版だったため)


XDebugインストール
  1. 最初にDBGプラグインが入っていないことを確認。
  2.  メニューから → [ヘルプ] → [新規ソフトウェアのインストール] → ダイアログ中央右下付近のリンク[すでにインストールされているのは?]を選択  ※ちょっとわかりにくいです。
     リストにDBGが入っていないことを確認。
     XDebug Featureが入っていることを確認。

  3. Apacheのドキュメントルート確認
  4.  Apachehttpd.confに設定されているドキュメントルートを確認
     ※複数設定されている場合は、今回対象としたいドキュメントルートを確認
     例:DocumentRoot "C:/docroot"
  5. Eclipseを起動します
  6.  開いていたら一度閉じて再起動。
     Eclipse起動時にワークスペースの選択が表示される。
     表示されない場合は[ウインドウ] → [設定] → [一般] → [開始およびシャットダウン] →
      → [ワークスペース] → [始動時にワークスペースをプロンプト]をチェック

  7. ワークスペースに、自分が作業フォルダとしたいフォルダを指定
  8.  たとえば「c:\workspacePHP」など。
     ここでの相対パスは、eclipse.exeからみた相対パスになります。

  9. ダウンロードしたXDebugを解凍、PHPのextフォルダにコピー
  10.  今回の場合は「php_xdebug-2.1.2-5.3-vc9.dll」というファイル名でしたのでそれをコピー。
  11. php.iniにXDebugの設定を追加
  12.  php.ini(通常Windowsフォルダ内らしいが、この時はphp-5.3.8直下にあった)をエディタで開き、
     [zend]のセクションに以下の記述をします。(他の記述はコメントアウトします)

    [Zend]
    zend_extension = C:\php-5.3.8\ext\php_xdebug-2.1.2-5.3-vc9.dll
    xdebug.remote_enable=On
    xdebug.remote_autostart=On
    xdebug.remote_handler=dbgp
    ;xdebug.remote_host=localhost
    xdebug.remote_port=9000
    xdebug.remote_mode=req
    

     xdebug.remote_hostは未設定だと$_SERVER['REMOTE_ADDR']のIPアドレスになるらしいです

     ↓参考サイト
     備忘:Eclipse PDT環境におけるXdebugを用いた複数リモート環境からのデバッグについて

     とりあえずDHCPなのでコメントアウトしておいた。

     接続先のサーバが外部に公開されていない限りこれでOKだと思う。

  13. 以下の変更を入れたほうが良いらしいので入れておく

  14. ;implicit_flush = Off
    implicit_flush = On
    



  15. Apacheをリブートします。




  16. リブート後、phpinfoにxdebugのセクションが追加されていたらOK




  17. xdebugが追加されていなかった場合
  18.  以下のURLにアクセスして、phpinfoで表示された内容のソースコードをそのまま貼り付けて「Analyze my phpinfo」すれば、原因を調査してくれます。



     http://www.xdebug.org/find-binary.php



     実際にファイルパスにミスがあり、上記サイトでphpinfo()の出力HTMLを入れたところ、こんな記述が

    Instructions
    1.Download php_xdebug-2.1.2-5.3-vc9.dll
    2.Move the downloaded file to C:\php-5.3.8\ext
    3.Edit C:\php-5.3.8\php.ini and add the line
      zend_extension = C:\php-5.3.8\ext\php_xdebug-2.1.2-5.3-vc9.dll
    4.Restart the webserver

    これで直りました。

テストプロジェクト作成・実行
  1. テストプログラムの配置

  2.  Webのドキュメントルートに、テスト用のフォルダ「debugtest」を作成し、index.phpを作って以下のコードを入力。

    <?php
    print "This is a test.";
    print "Is XDebug working well?";
    ?>
    

  3. テストプログラムの動作確認
  4.  まずは、上記コードが正しく動作することを確認するため http://localhost/debugtest にブラウザからアクセスしてみてください。



  5. プロジェクトの作成
  6.  Eclipseを起動。先ほど指定したフォルダ c:\workspacePHP を指定します。

     [ファイル] → [新規] → [プロジェクト] → [PHP] → [PHPプロジェクト]を選択



  7. 新規PHPプロジェクトダイアログが表示されます。
  8.  プロジェクト名:debugtest →[完了]

     左ペインに作ったプロジェクトが表示されます。



  9. プロジェクトにPHPのソースが入っているフォルダを追加
  10.  左ペインのプロジェクトを右クリック → [新規] → [フォルダ] → [拡張]選択

     [Link to alternate location(リンクされたフォルダー)]選択

     [ファイルシステム内のフォルダーにリンク]をチェック。

     [参照]を押し、Webのドキュメントルートに作ったdebugtestフォルダを指定 → [OK] → [完了]



  11. debugtestフォルダを右クリック → [プロパティ]で内容を確認
  12.  ロケーションが意図したフォルダになっていればOK。

     ※最初からプログラムがたくさん入っている場合はここで文字コードを適切に選択。



  13. ブレイクポイントの設置
  14.  index.phpをダブルクリックしてオープン。

     「print “This is a test.”;」の行の左端のエリア(グレー)を右クリック → [Toggle XDebug Breakpoint](ダブルクリックでも可)。

     ブレークポイントを示す青丸が表示される。



  15. XDebugデバッガの設定
  16.  デバッグ用の虫ボタンの右の矢印をクリック → [デバッグの構成]選択

     [PHP XDebug Remote Script]をダブルクリック → 新規構成を表示

     名前を「testdebug Remote」に変更(任意)

     メインタブのプロジェクト欄がdebugtestになっていることを確認。

     メインタブ、Ide Identfication String:を設定。デフォルトで"testID"。後で使用。

     Pathmapタブ、[新規]でEdit File Mapを開く。

     Local_Pathは、Webのドキュメントルートを指定。

     Remote Pathも、Webのドキュメントルートを指定。

     これは、Apacheのリモートソースパス+作ったフォルダ名になっているはず。

     → [OK] → [適用] → [デバッグ]

     ここでファイアウォールの警告が出たら、アクセスを許可する。

     実はこの時点でデバッグが始まっている。



  17. デバッグパースペクティブをあける
  18.  ウィンドウ右上のパースペクティブエリア(すでにPHPパースペクティブボタンが表示されているはず)にある、

     [パースペクティブを開く]ボタンから、デバッグを表示し、デバッグパースペクティブに移行します。



  19. 実行
  20.  ブラウザを開き http://localhost/debugtest にアクセス。

     対象のページが表示される。

     ここでURLに「?XDEBUG_SESSION_START=ID」をつけます。

     IDは先ほど決めた Ide Identfication String です。デフォルトだと testID なので以下のようなURLになります。



     http://localhost/debugtest/?XDEBUG_SESSION_START=testID



     Eclipse側では、ブレークポイントでとまっているはず。

     止まっていればこれで成功です。



     [実行]メニューにデバッガの起動、停止、再開、ステップ実行等あるのでいろいろ試してみてください。



この記事の続き