NetBeans IDEを使用したPHPスクリプトのデバッグ
ご存知のように、誰かが高レベル言語でコードを書くときに、構文エラーと論理エラーの2つのタイプのエラーが発生する可能性があります。 NetBeans IDEには、スクリプトのデバッグやエラーの検出に役立つ必要なすべてのツールが用意されています。
構文エラーのデバッグ
幸いなことに、NetBeans IDEでは、入力中に構文エラーが検出され、図1に示すように赤い波線で下線が引かれます。
図1NetBeans IDEでは、構文エラーに赤い波線
で下線が引かれています。対応するエラーを修正するだけで、赤い線はすぐに消えます。 ただし、コードの何が間違っているのかわからない場合は、赤い感嘆符の上にマウスカーソルを置くだけです。 NetBeans IDEは、図2に示すように、エラーの簡単な説明を含むポップアップ-ウィンドウを表示することで、あなたを助けようとします。
図2NetBeans IDEは、構文エラーの説明を示しています
スクリプトを段階的に実行することによる論理エラーのデバッグ
構文エラーと比較して、論理エラーを見つ NetBeans IDEは論理エラーを検出して下線を引くことができないので、あなたはすべて一人です! たとえば、次のPHPスクリプトを見てみましょう。 これは、二つの数字を入力するようにユーザーに求められ、計算し、その合計を表示します。 しかし、それは論理エラーが含まれています!
<?php $s = 0; echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $S = $a + $b; echo "The sum is: ", $s;?>
このスクリプトをNetBeans IDEに入力すると、エラーを示す感嘆符が一つもないことがわかります。 ただし、スクリプト(SHIFT+F6)を実行し、5と2の2つの値を入力すると、図3に示すように、5と2の合計が7であっても、NetBeans IDEではゼロであると主張され
図3出力ウィンドウでの論理エラーの結果の表示
一体何が起こっているのですか? もちろん、専門家のプログラマのために、このエラーを修正することはケーキの一部になります。 しかし、あなたのために、初心者のものは、あなたが懸命にしようとしているにもかかわらず、あなたは何も間違って見つけません。 では、エラーはどこにありますか?
人間の目が疲れて明白なものを見ることができないことがあります。 だから、いくつかの魔法を使用してみましょう! デバッガを使用して、スクリプトを段階的に実行してみましょう。 これにより、実行の流れを観察し、各ステップの変数の現在の値を詳しく調べる機会が得られます。
メインメニューから”Debug→
Debug File”を選択するか、CTRL+SHIFT+F5キーの組み合わせを押してデバッガを起動します。 これにより、デバッガを有効にすると、ツールバーにさらに多くのアイコンが表示されます。
注意:デバッガ(XDebug)を有効にするには、PHPを変更する必要があります。iniファイル。 より多くの情報はここに。
プログラムカウンタ(灰色の余白にある緑色の矢印アイコン)は、図4に示すようにスクリプトの最初の行で停止します。
図4NetBeans IDEでのデバッガの使用
注意:プログラムカウンタには、いつでも、次に実行される文が表示されます。
ツールバーの”ステップイン”アイコンをクリックします。 このアクションは、文$s = 0
を実行するようにPHPインタプリタに指示し、プログラムカウンタは次に実行される2番目のPHP文に移動します。
メインメニューから、”ウィンドウ→
デバッグ→
変数”を選択します。 表示されるウィンドウでは、メインメモリ(RAM)で宣言されたすべての変数と、実行の各ステップ中に含まれる値を見ることができます。 これまで、宣言され、値が割り当てられた変数は、図5に示すように、変数$s
だけです。
図5デバッガの変数ウィンドウに変数$sの値が表示されます
“ステップイン”ツールバーアイコンを再度クリックします。 2番目の文が実行されます。 “出力”ウィンドウに戻り、出力結果を確認できます(図6を参照)。
図6出力ウィンドウでのプロンプトの表示
“ステップイン”ツールバーアイコンを再度クリックします。 3番目のPHP文が実行され、プログラムは値を入力するのを待ちます。 “出力”ウィンドウ内にカーソルを置き、値5を入力し、”Enter↵”キーを押します。
プログラムカウンタは4番目のPHP文に移動します。 「変数」ウィンドウに戻ると、図7に示すように、現時点では2つの変数($a
と$s
)がメインメモリ(RAM)で宣言されていることがわかります。
図7変数$aとs sの値が変数ウィンドウに表示されます
“ステップイン”ツールバーアイコンを二度クリックします。 このアクションは、4番目と5番目のPHP文を実行します。 “出力”ウィンドウ内にカーソルを置き、値2を入力し、”Enter↵”キーを押します。
プログラムカウンタは6番目のPHP文に移動します。 「変数」ウィンドウに戻ると、図8に示すように、この時点で3つの変数($a, $b
および$s
)がメインメモリ(RAM)で宣言されていることがわかります。
図8変数$a, $b
および $s
の値が変数ウィンドウに表示されます
“ステップイン”ツールバーアイコンをもう一度クリックします。 文$S = $a + $b
が実行されます。 ここで期待したのは、変数$s
に割り当てられる5と2の合計、つまり7でした。 これの代わりに、新しい変数$S
がメインメモリ(RAM)で宣言され、値7が割り当てられます(図9参照)。
図9すべての宣言された変数がデバッガ
の変数ウィンドウに表示されるようになりました。 メインメモリ(RAM)で変数$s
と変数$S
の2つの変数を大文字のSで誤って宣言しました。 そのため、実行の流れが最後の文になると、echo "The sum is: ", $s
は値7ではなく値0が表示されます。
あなたはちょうどエラーを発見しました! “Finish Debugger Session”ツールバーアイコンをクリックして実行をキャンセルし、変数$S
を$s
に変更してエラーを修正すると、準備が整いました! あなたはちょうどあなたの最初のデバッグを実行しました! スクリプトを再実行すると、合計が正しく計算されて表示されることがわかります。
ブレークポイントを追加して論理エラーをデバッグする
ステップごとにデバッグすることは大きな欠点があります。 エラーが発生する可能性のある位置に到達するまで、”ステップイン”ツールバーアイコンを何度も何度もクリックする必要があります。 あなた自身が大きい原稿のこれをすることを想像できるか。
大規模なスクリプトには別のアプローチがあります。 エラーがスクリプトの最後のどこかにあると思われる場合は、最初からすべてをデバッグする必要はありません。 エラーの可能性があると思われる場所にマーカー(”ブレークポイント”と呼ばれる)を追加し、スクリプトを実行し、実行の流れがそのブレークポイントに達すると、実行の流れが自動的に一時停止することができます。 その後、スクリプトが一時停止された位置での変数の現在の値を詳しく調べることができます。
注意:スクリプトが一時停止すると、実行を再開するための二つのオプションがあります:スクリプトの下のどこかに第二のブレークポイントを追加し、”Continue”ツールバーアイコンをクリックし、その新しいブレークポイントまでスクリプトが実行を継続できるようにすることができます。または、”Step into”ツールバーアイコンを使用して、その後スクリプトを段階的に実行することができます。
次のPHPスクリプトは、ユーザーに二つの値を入力するように促し、その平均値を計算します。
ただし、スクリプトにロジックエラーが含まれています。 ユーザーが値10と値12を入力すると、値11ではなく値16が表示されます。
<?php echo "Enter 1st value: "; $a = trim(fgets(STDIN)); echo "Enter 2nd value: "; $b = trim(fgets(STDIN)); $average = $a + $b / 2; echo "The average value is: ", $average;?>
問題はスクリプトの最後のどこかにあると思われます。 ただし、スクリプト全体をデバッグするのではなく、エラーが発生する可能性のある部分だけをデバッグします。 そこで、$average = $a + $b / 2
ステートメントにブレークポイントを追加してみましょう(図10を参照)。 これを行うには2つの方法があります: 対応する行番号の左の灰色の余白をクリックするか、関心のある行にカーソルを置き、CTRL+F8キーの組み合わせを押すことができます。
図10スクリプトへのブレークポイントの追加
注意:ピンクの四角形がグレーの余白に表示され、対応する行にピンクの背景が強調表示されている場合、ブレークポイントが設定されていることがわかります。
ctrl+SHIFT+F5を押してデバッガを起動します。 “Continue”ツールバーアイコンをクリックし、要求されたときに値10と12を入力します。 2番目の番号を入力して「Enter↵」キーを押した直後に、実行の流れがブレークポイントで一時停止することがわかります。 (ピンクのブレークポイントの強調表示が、プログラムカウンタの緑色の強調表示に置き換えられます。)
覚えておいてください! ファイルをデバッグするには、メインメニューから「Debug
→
Debug File」を選択するか、CTRL+SHIFT+F5キーの組み合わせを押します。
今、あなたは変数の現在の値を詳しく見ることができます。 変数$a
と$b
には、それぞれ値10と12が含まれているため、図11に示すように、データ入力に問題はありません。
図11変数ウィンドウでの2つの変数の現在の値の表示
“ステップイン”ツールバーアイコンを1回クリックします。 ステートメント$average = $a + $b / 2
が実行され、メインメモリ(RAM)に次の値が含まれるようになりました(図12参照)。
図12変数ウィンドウで3つの変数の現在の値を表示する
そこにあります! 変数$average
に11ではなく16の値を誤って代入する文が見つかりました! そして今困難な部分は来る;これがなぜ起こるか考慮するべきである!
二日の思考の後、それは明らかになります! あなたはちょうど括弧の中に$a + $b
を囲むのを忘れていたので、変数$b
だけが2で除算されました。 “Finish Debugger Session”ツールバーアイコンをクリックし、すべてのブレークポイントを削除し、括弧の中に$a + $b
を囲んでエラーを修正すると、準備が整いました! スクリプトを再実行し、平均値が正しく計算されて表示されることを確認します。