Windows7 - XDebugインストール (PHPEclipse)
- デバッガツール
- xDebugのインストール
- 不具合箇所でプログラムを停止&ステップ実行 めんどくさいerror_log() print_r()の大量バラマキを減らす
※本記事はWindows7 - PHPEclipseインストールの続きです。
本記事を見てXdebugをインストールされる場合はそちらの記事も参考にしてください。
内容が一部重複しているのは「大事なことなので2回言った」と思ってスルーして下さい(笑)
本記事を見てXdebugをインストールされる場合はそちらの記事も参考にしてください。
内容が一部重複しているのは「大事なことなので2回言った」と思ってスルーして下さい(笑)
- テキストエディタによるPHP開発でありがちな問題
- @PHP言語の特徴「コンパイルが無い」「型チェックが弱い」「変数宣言が不要」
- ・コンパイルエラーが出ないので単なる変数名/関数名ミスでハマる
- ・変数が無かったり意図しない動きでもなんとなく動いてしまい不具合箇所の特定に時間が掛かる
- ・実行しないとわからないので実行とコード修正を繰り返し不具合箇所の特定に時間が掛かる
- ・デバッガが無いと不具合箇所の特定ができないので時間が掛かる
いずれもできる限り専門知識が無くてもプログラムができるようにするため曖昧さを許容する仕様となっているのですが、完成度を上げようとするとその曖昧さ故に不具合の原因が特定しにくい現象が出てきてしまうのです。
OS | Windows7 Ultimate 64bit(VMWare Fusion3) |
---|---|
マシン | iMac 2010 Mid Core i5 760@2.80GHz Mem=12GB(Win6GB,Mac6GB) |
HDD | 1TB(Win545GB,Mac299GB) SSDが欲しいです! |
WEBサーバー | Apache 2.2.21 32bit |
PHP | PHP 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話) |
- XDebugダウンロード XDebug.org
- XDebugインストール
- 最初にDBGプラグインが入っていないことを確認。 メニューから → [ヘルプ] → [新規ソフトウェアのインストール] → ダイアログ中央右下付近のリンク[すでにインストールされているのは?]を選択 ※ちょっとわかりにくいです。
- Apacheのドキュメントルート確認
- Eclipseを起動します
- ワークスペースに、自分が作業フォルダとしたいフォルダを指定 たとえば「c:\workspacePHP」など。
- ダウンロードしたXDebugを解凍、PHPのextフォルダにコピー 今回の場合は「php_xdebug-2.1.2-5.3-vc9.dll」というファイル名でしたのでそれをコピー。
- php.iniにXDebugの設定を追加 php.ini(通常Windowsフォルダ内らしいが、この時はphp-5.3.8直下にあった)をエディタで開き、
- 以下の変更を入れたほうが良いらしいので入れておく
- Apacheをリブートします。
- リブート後、phpinfoにxdebugのセクションが追加されていたらOK
- xdebugが追加されていなかった場合 以下のURLにアクセスして、phpinfoで表示された内容のソースコードをそのまま貼り付けて「Analyze my phpinfo」すれば、原因を調査してくれます。
リストにDBGが入っていないことを確認。
XDebug Featureが入っていることを確認。
Apacheのhttpd.confに設定されているドキュメントルートを確認
※複数設定されている場合は、今回対象としたいドキュメントルートを確認
例:DocumentRoot "C:/docroot"
開いていたら一度閉じて再起動。
Eclipse起動時にワークスペースの選択が表示される。
表示されない場合は[ウインドウ] → [設定] → [一般] → [開始およびシャットダウン] →
→ [ワークスペース] → [始動時にワークスペースをプロンプト]をチェック
ここでの相対パスは、eclipse.exeからみた相対パスになります。
[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だと思う。
;implicit_flush = Off implicit_flush = On
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
これで直りました。
- テストプロジェクト作成・実行
- テストプログラムの配置
- テストプログラムの動作確認 まずは、上記コードが正しく動作することを確認するため http://localhost/debugtest にブラウザからアクセスしてみてください。
- プロジェクトの作成 Eclipseを起動。先ほど指定したフォルダ c:\workspacePHP を指定します。
- 新規PHPプロジェクトダイアログが表示されます。 プロジェクト名:debugtest →[完了]
- プロジェクトにPHPのソースが入っているフォルダを追加 左ペインのプロジェクトを右クリック → [新規] → [フォルダ] → [拡張]選択
- debugtestフォルダを右クリック → [プロパティ]で内容を確認 ロケーションが意図したフォルダになっていればOK。
- ブレイクポイントの設置 index.phpをダブルクリックしてオープン。
- XDebugデバッガの設定 デバッグ用の虫ボタンの右の矢印をクリック → [デバッグの構成]選択
- デバッグパースペクティブをあける ウィンドウ右上のパースペクティブエリア(すでにPHPパースペクティブボタンが表示されているはず)にある、
- 実行 ブラウザを開き http://localhost/debugtest にアクセス。
Webのドキュメントルートに、テスト用のフォルダ「debugtest」を作成し、index.phpを作って以下のコードを入力。
<?php print "This is a test."; print "Is XDebug working well?"; ?>
[ファイル] → [新規] → [プロジェクト] → [PHP] → [PHPプロジェクト]を選択
左ペインに作ったプロジェクトが表示されます。
[Link to alternate location(リンクされたフォルダー)]選択
[ファイルシステム内のフォルダーにリンク]をチェック。
[参照]を押し、Webのドキュメントルートに作ったdebugtestフォルダを指定 → [OK] → [完了]
※最初からプログラムがたくさん入っている場合はここで文字コードを適切に選択。
「print “This is a test.”;」の行の左端のエリア(グレー)を右クリック → [Toggle XDebug Breakpoint](ダブルクリックでも可)。
ブレークポイントを示す青丸が表示される。
[PHP XDebug Remote Script]をダブルクリック → 新規構成を表示
名前を「testdebug Remote」に変更(任意)
メインタブのプロジェクト欄がdebugtestになっていることを確認。
メインタブ、Ide Identfication String:を設定。デフォルトで"testID"。後で使用。
Pathmapタブ、[新規]でEdit File Mapを開く。
Local_Pathは、Webのドキュメントルートを指定。
Remote Pathも、Webのドキュメントルートを指定。
これは、Apacheのリモートソースパス+作ったフォルダ名になっているはず。
→ [OK] → [適用] → [デバッグ]
ここでファイアウォールの警告が出たら、アクセスを許可する。
実はこの時点でデバッグが始まっている。
[パースペクティブを開く]ボタンから、デバッグを表示し、デバッグパースペクティブに移行します。
対象のページが表示される。
ここでURLに「?XDEBUG_SESSION_START=ID」をつけます。
IDは先ほど決めた Ide Identfication String です。デフォルトだと testID なので以下のようなURLになります。
http://localhost/debugtest/?XDEBUG_SESSION_START=testID
Eclipse側では、ブレークポイントでとまっているはず。
止まっていればこれで成功です。
[実行]メニューにデバッガの起動、停止、再開、ステップ実行等あるのでいろいろ試してみてください。