いよいよプログラムをデバッグしてみましょう。ツールバーの左から5番目にある、虫(バグ)のアイコンをクリックします。初回の起動時のみ「Debug As」というダイアログ(図8)が表示されますので、[PHP Web Page]を選択し、[OK]をクリックしてください。
次にデバッグするPHPプログラムのパスを確認するダイアログが現れます(図9)。URLが間違いないことを確認し、再度[OK]をクリックします。
さらに[Confirm Perspective Switch]というダイアログが表示されます。実はEclipseでは、タスクの種類ごとにパースペクティブと呼ぶ画面レイアウトを切り替えます。PHPプログラムをデバッグするときは、「PHP Debug」パースペクティブに切り替える方が便利です。ここで、[Yes]をクリックすればデバッグ画面に移動します。なお、ワークベンチ右上のPHPアイコンをクリックしても、パースペクティブを切り替えられます。
PHP Debugパースペクティブが開き、図10のような画面が現れたら成功です。hello.phpの2行目がハイライトされているのは、プログラムの実行がこの行の手前で停止していることを表しています。このように、デバッグを開始すると実行が停止した状態になります。これは、XDebugがPHPプログラムの実行を停止させ、Eclipseからのデバッグ指示を待機しているのです。例えば、F8キーを押すか、[Run]メニューから[Resume]を選択してみてください。プログラムが最後まで実行され、ブラウザに実行結果が現れるはずです。
このようにPDTを使うと、Eclipseでプログラムの動作を確かめながら、高度な手法を使ってプログラムのデバッグができます。
例えば、ブレークポイントという機能があります。これは、プログラムの実行を好きな行で中断させる機能です。PDTでは行番号の左をダブルクリックするとブレークポイントを設定できます。ブレークポイントを設定した行は、青色のマーカーが付きます。設定したブレークポイントは、Breakpointsパネルにも一覧で表示されます。
試しに、先ほどのプログラムの6行目にブレークポイントを設定してみましょう。6行目の行番号の左をダブルクリックして、青色のマーカーを付けます。デバッグを開始すると、先ほどと同じように2行目で停止します。そこでF8キーを押してプログラムの実行を再開すると、6行目で停止することが分かります。
ブレークポイントと組み合わせて使うと便利な機能がステップ実行です。これは、ブレークポイントなどで中断したプログラムを1行単位で実行させる機能です。PDTでは3種類のステップ実行機能を持っています。ステップ実行を始めるには[Run]メニューをクリックしてください。
Step Intoはプログラムを1行単位で実行するものです。ユーザーが定義した関数があれば、その内部にも入りながら、実行を進めます。F5キーを押すことでもこの機能を呼び出せます。
Step Overも1行単位で実行を進めるものですが、Step Intoと異なり関数があるときは関数を実行してしまって、すぐに次の行に移動します。F6キーを押すことでもこの機能を呼び出せます。
Step Returnは、その時点で実行中の関数を最後まで実行し、その関数の呼び出し元に戻るところで停止するものです。F7キーでもこの機能を使えます。
3種類それぞれ動きが異なるステップ実行機能を組み合わせることで、プログラムが実際にどのように動いているのか、詳細に確認できるのです。試しに、ブレークポイントで停止した後、それぞれF5、F6、F7キーをタイプしながら、動作を確認してみてください。
そして、ステップ実行中は、ソースコードの変数名の所へマウスカーソルを当てると、その時点での変数の内容を確認できます。また、Variablesパネルにも全ての変数の内容が表示されます。
ブラウザが開いている間は、常にデバッグが有効な状態となります。そのため、ブラウザの読み込みを更新したり、同じサーバの別のURLを読み込むたびに、デバッグが始まります。
残念ながら、ブラウザを閉じてもPDTはユーザーの「デバッグを終わらせたい」という意志が理解できません。そのため、デバッグを終了する場合は[Run]メニューから[Terminate]をクリックし、デバッグを明示的に中断する必要があります。
このように、XDebugとPDTなどのIDE製品と組み合わせることで、PHPでも高度なデバッグ機能が利用できます。
特に、PHPのオブジェクト指向機能が進化し、それらの機能を生かしたフレームワークが主流になりつつある現在は、コードリーディングのためにもIDEやデバッグ機能は大活躍することでしょう。
次回はデバッグから離れ、プログラムコードを統計的に管理するための仕組みであるカバレッジとプロファイラについて紹介します。
アシアル株式会社
田中正裕
アシアル株式会社代表取締役。根っからのプログラミング好きが高じて、ソフトウェア企業であるアシアル株式会社を設立。サーバサイド開発言語であるPHPと、iPhone/Androidなどのスマートフォンに特化し、開発者向けにソフトウェアやサービスを提供している。プロフェッショナルなエンジニアを育成するため、講座カリキュラムの開発や運営など教育事業も展開。主な著書に『超・極める!PHP(共著、翔泳社)』や『symfony×PHP(共著、技術評論社)』など。PHP技術者養成を支援する『PHP技術者認定機構』の顧問も務める。
Copyright © ITmedia, Inc. All Rights Reserved.