PHPのようなプログラム言語を使って開発を行っている場合、書いているプログラムが正しいかどうか気になりますよね。
また何かしらの不具合が出た場合どこが原因なのかを調べたいところです。
そこで今回は、デバッグの重要性とPHP言語内のデバッグ用関数を使ってデバッグの方法までご紹介します。
目次
デバッグをしエラーを取り除くことでプログラムが完成する
プログラムを組んだ際に重要になるのがきちんと実行できているかを確認するデバッグです。
プログラムを組むだけ組んで実行しみたところエラーが出てしまうと、どこでエラーが出ているか探すのが大変です。
ここからはプログラムをデバッグすることの重要性について解説していきます。
作った変数は逐一正常に動作しているか確認
PHPなどのプログラム言語を使ってコーディングを行い、一通り組んでから実行するとエラーが出ることはよくあります。
実行してエラーが出たことを確認し修正することをデバッグと言います。
【初心者向け】PHPのエラーを確認する方法!一通り組んでから実行してデバッグをすると、どこでエラーが起こっているのか調べるのが大変です。
なのでプログラムを組む際は作ったコードや変数が正しく動作するか、逐一デバッグする必要があります。
またエラーでなくても思ったとおりにプログラムが動作してないなら、デバッグしないといけません。
何かしらのコードを組んではこまめにデバッグするクセをつけることによって、プログラムが完成されていきます。
実際にプログラムを動かしエラーが出た箇所を見極める
実際にプログラムを実行してみてエラーが出たり、または思ったとおりに動いていなかったりするのなら、原因を特定する必要があります。
エラーの原因を特定するのに一番わかり易いのが、エラー箇所の中身を表示させることです。
PHPで考えるならエラーが出ていると思われる箇所で、echoやprintを使って変数の中身を表示させます。
これでエラーの原因が特定できない場合は、エラー表示用のコードを一度消しもう少し後ろにエラー表示用のコードを書き加えます。
このようにしてエラーが出ている箇所を特定しデバッグしていきます。
プログラム内でコードがどう辿っているかを知る
先ほど紹介したようにエラー箇所で中身を表示させてこまめにデバッグしていても、全体的にエラーが出てしまうことがあります。
そういった場合はプログラムごとに用意されているコードを辿っていける関数を使いましょう。
大体の場合コードを辿れる関数やシステムが内部で用意されていることが多いです。
どんなベテランプログラマー・コーダーでも、デバッグせずにプログラムを組んで一発で実行させて成功させることはできません。
見た目上エラーが出ていないように見えていても、実行してみると予想外の挙動になることも多いです。
使える関数・システムはしっかりと駆使して逐一デバッグし、プログラムを完成に近づけていくことが重要です。
PHP言語内デバッグ用関数ver_dumpでデバッグをすることができる
PHPにはデバッグ用の関数としてver_dump関数が用意されています。
ver_dump関数を使えば変数の中身を表示してくれますし、変数が配列であっても詳細に中身を表示してくれます。
変数の中身が配列の場合であってもキーと値だけでなく値の型に関する情報まで表示できます。
実行例としては以下のようになります。
1 2 3 4 5 6 7 8 |
// 変数strに文字列hogeを代入 $str = 'hoge'; // 変数arrayに配列で文字としてa,b,cを1つずつ代入 $array = array('a','b','c'); // ver_dumpを使って変数strの中身を表示 ver_dump(&str); // ver_dumpを使って変数arrayの中身を表示 ver_dump($array); |
これを実行すると以下のように結果が表示されます。
1 2 |
string(4) "hoge" array(3) {[0]=>string(1) "a" [1]=>string(1) "b" [2]=>string(1) "c"} |
1行目はver_dumpで指定した変数strの中身が4つの文字型(string)で「hoge」であることを表しています。
2行目はver_dumpで指定した変数arrayが配列構造で、1つずつに1つの文字型で順番にa・b・cが入っていることを表しています。
このようにver_dumpで指定した変数の中身について、型と中身が表示されるようになっています。
preで囲むことで表示がある程度きれいになる
前項のようにver_dumpで変数の中身を表示させると、配列は改行がなくて見にくいです。
配列は改行を入れてどの場所に何が入っているか見やすくしたいですよね。
そんな時はver_dumpをpreで囲めば、以下のような改行が入れられて表示されます。
1 2 3 4 5 6 7 8 |
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]= >string(1) "c" } |
簡易的ではありますが配列の中身をある程度わかりやすく表示させることができます。
【初心者向け!】htmlでスペースを入れる方法や空白行を入れる方法紹介!Xdebugを使えばver_dumpの表示がキレイになる
XdebugはPHPには標準で入っていない、外部から導入できるPHPの拡張機能です。
導入することでデバッグ関連の機能が使えるようになりますが、特に使えるのがver_dumpの拡張機能です。
Xdebugを導入してver_dumpを使えば、preタグを入れないとされなかった改行がpreタグ無しで改行されます。
それだけでなく、見やすさに関しても未導入と比べるとかなり見やすくなります。
Xdebugを導入してver_dumpを使えば以下のように表示されます。
1 2 3 4 5 |
string 'hoge' (length=4) array(size=4) '0' => string'a' (length=1) '1' => string'b' (length=1) '2' => string'c' (length=1) |
Xdebugを導入している方が見やすくてわかりやすいです。
ただし表示には制限があり、表示したい要素が多いかったり階層が深すぎると、表示が省略されるので注意ですね。
debug()でもver_dumpの表示をキレイにできる
PHPでの開発を助ける機能の詰め合わせとして、PHPにはオープンソースのフレームワークがあり、そのうちの1つにCakePHPというものがあります。
【PHP入門】PHPのフレームワーク4選!このCakePHPを導入していると使うことができるのがdebug()関数です。
名前の通りのデバッグ用関数で、Xdebugと同じようにVer_dumpの表示をキレイにしてくれます。
Xdebugとは違ってインストールは不要で使える点が便利ですね。
debug()関数を使う場合は、以下のようにver_dump部分をdebugに書き換える必要があります。
1 2 3 4 5 6 7 8 |
// 変数strに文字列hogeを代入 $str = 'hoge'; // 変数arrayに配列で文字としてa,b,cを1つずつ代入 $array = array('a','b','c'); // debugを使って変数strの中身を表示 debug(&str); // debugを使って変数arrayの中身を表示 debug($array); |
これを実行すると以下のように表示されます。
array( /app/view/Pages/memo.php(line 9)
‘0’ => ‘a’
‘1’ => ‘b’
‘2’ => ‘c’
)
ver_dumpよりも見やすく表示させてくれるのと同時に、どのファイルの何行目に書かれているかまで表示させてくれます。
バグを見つけて修正する際に、場所をちゃんと表示してくれるのでデバッグ作業しやすいですね。
まとめ
今回はデバッグの重要性とPHP内でのデバッグ方法をご紹介しました。
PHP内では基本的にはver_dumpを使って変数の中身などを表示させて、辿っていくことになります。
Xdebugやdebug()を使えばより表示がキレイになり使いやすくなります。
デバッグはプログラムを組む上で重要な要素ですので、使い方を覚えて積極的に使っていってくださいね。