エラーの位置特定方法とは?

このQ&Aのポイント
  • 大規模なアプリケーションでエラーが起きた場合、どの手順で呼び出されたのか、ループの何回目なのかといった情報を判断する方法はありませんか?
  • エラーが発生した位置を特定する方法はありますか?例えば、特定の関数経由でエラーが発生した場合、その経路を効率的に判断する方法はありますか?
  • 大規模なアプリケーションのデバッグにおいて、どの段階でエラーが発生するのかを判断する方法はありますか?
回答を見る
  • ベストアンサー

エラーが起きた位置の特定

例えば下記のようなコードで、この(↓)エラーが出たとします。 Warning: somefunc1(): The argument should be an array in /path/to/test.php on line 5 このエラーが、 A) 18行目→test_func1()→somefunc1() の経路で発生したエラーなのか、 B) 19行目→test_func2()→test_func1($arg1)→somefunc1() の経路なのか、 C) 19行目→test_func2()→test_func1($arg2)→somefunc1() の経路なのか、 それを効率よく判断する方法はありませんか? この位簡単なコードではデバッグも簡単なんですが、大規模なアプリケーションになってくると、どの時点で起きたエラーなのか(どの手順で呼び出された時なのか、ループの何回目なのか等)の判断ができなくなってきてしまいます。 ==== test.php ==== 01: <?php 02: 03: function test_func1($arg) 04: { 05:   somefunc1($arg); // PHP組み込み関数 06: } 07: 08: function test_func2($arg) 09: { 10:   $arg1 = somefunc2($arg); // PHP組み込み関数 11:   $arg2 = somefunc3($arg); // PHP組み込み関数 12:   test_func1($arg1); 13:   test_func1($arg2); 14: } 15: 16: $val = /* ...処理... */ ; 17: 18: test_func1($val); 19: test_func2($val); 20: 21: ?> よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

xdebugを使うのはどうでしょ。これを使うとエラーやノーティスが拡張され、スタックトレース(関数やクラスメソッドの呼び出し階層)や変数の値を表示させる事ができるようになる。 詳しくは「xdebug PHP」で検索の事。

pe_daichan
質問者

お礼

xdebugを使って見ました。すばらしいです! どうもありがとうございました!!

関連するQ&A

  • jQueryでの、引数を取るJS関数の呼出方法

    jQueryの学習をしています。 HTML & JavaScriptで下記のように書かれているコード <input type=button id=button1 onclick=func_a() /> <script> function func1(){ //処理いろいろ } </script> は、jQueryを使って書くと、 $('#button1').live('click', func_a); このように書けます。 <input type=button id=button1 onclick=func_b(arg1, arg2) /> <script> function func_b(argument1, argument2){ //処理いろいろ } のように引数を取る関数は jQueryではどのように書けばよいのでしょうか? $('#button1').live('click', func_b(arg1, arg2)); とは書けなかったので、今は、 if (arg1 == xxx){ $('#button1').live('click', func_b_1_1); } else { $('#button1').live('click', func_b_1_2); } などのように引数別に同じような関数を創って書いています。 DRY原則という同じコードを二度書くなという約束もあるようなので、 きっといい方法があると思うのですが、 お詳しい方、教えていただけるとうれしいです。 どうぞ、よろしくお願いいたします。

  • function()を初めて使いました。エラー。

    かなり初歩的な質問をさせていただきます。 初めてfunction関数を使ったのですが、下記のようなエラーが出ました。 Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\logpage.php on line 99 Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\logpage.php on line 100 Warning: array_reverse() [function.array-reverse]: The argument should be an array in E:\Web\Chat2\chat\function.php on line 38 Warning: flock() expects parameter 1 to be resource, boolean given in E:\Web\Chat2\chat\function.php on line 41 Warning: fputs(): supplied argument is not a valid stream resource in E:\Web\Chat2\chat\function.php on line 48 Warning: flock() expects parameter 1 to be resource, boolean given in E:\Web\Chat2\chat\function.php on line 49 Warning: fclose(): supplied argument is not a valid stream resource in E:\Web\Chat2\chat\function.php on line 50 チャットを作っていて、何度も使う文をfunctionでまとめて、別ファイルに保存し、 requireで呼び出して、str();で使うとこうなりました。 function load(){ $log_data = "./data/log".$_GET['id'].".cgi"; $log_file = file($log_data); $member_data = "./data/member".$_GET['id'].".cgi"; $member_file = file($member_data); } このような形で使っているのですが、何かfunctionを使うにあたって注意などがあれば教えていただけませんか?

    • 締切済み
    • PHP
  • 関数の引数なしを変数に代入したら入ってきた数値は何?

    デバッグソフトで自分のプログラムを動かしていたときに、 int test_func(char x) { x = x + 1; ------(中略)----------- return x; } int main(void) { int test_val; ------(中略)----------- test_val = test_func; ------(中略)----------- } このようにtest_func(char x)という関数の戻り値を変数test_valに代入するつもりだったのですが、間違って引数部分を書かずにコンパイルしてしまいました。 このときにコンパイルでエラーが出ると思ったのですが、コンパイル完了でデバッガで変数test_valをみてみると何か値が入っていました。 ちょっと気になったのですが、この変数の中に入った値はいったい何なのでしょうか。ご存じの方いらっしゃいましたらご教授お願いいたします。

  • PHPエラーについて教えてください

    PHPエラーについて教えてください GD関数のエラーだと思います。 サーバを移動したら以下のようなエラーが出ました。 どのようなエラーになるのでしょうか。 Warning: imagesx(): supplied argument is not a valid Image resource in /home/sites/heteml/xxx/xxx.php on line 99 Warning: imagesy(): supplied argument is not a valid Image resource in /home/sites/heteml/xxx/xxx.php on line 99 Warning: imagecopyresized(): supplied argument is not a valid Image resource in /home/sites/heteml/xxx/xxx.php on line 99 Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/sites/heteml/xxx/xxx.php on line 100

    • ベストアンサー
    • PHP
  • エラーの意味

    本当に困り果てています。 この警告の意味を教えてください。 Warning: fopen(test.txt) [function.fopen]: failed to open stream: Permission denied in /var/www/html/練習プログラム/test_kanryou.php on line 17 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/html/練習プログラム/test_kanryou.php on line 18 誰か詳しい方がいれば、教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • C# ref引数のnull判定

    C# ref引数のnull判定 こんにちは。 以下のような関数なのですが、 void func(ref uint arg) { ・・・・・ } argがnullかどうかを判断するにはどうすればよいのでしょうか? プラグインを作成していまして、funcは既存のインターフェースの実装なのですが、呼び出し側でargにnullを入れるケースがあり、判断する方法がわからすに困っています。 試しに if( arg != null ) { .... } としてみましたが、「型'uint'の値が型'uint?'の'null'に等しくなることはないので、式の結果は常に'true'になります。」 というwarningが出てしまい、判定できませんでした。

  • Openpneを導入したけどエラー

    Warning: array_map() [function.array-map]: Argument #2 should be an array in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 666 Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 667 Warning: Invalid argument supplied for foreach() in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 668 Warning: Cannot modify header information - headers already sent by (output started at /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php:666) in /home/users/1/サイト名/web/openpne/webapp/lib/OpenPNE/Smarty.php on line 115 Warning: array_map() [function.array-map]: Argument #2 should be an array in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 666 Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 667 Warning: Invalid argument supplied for foreach() in /home/users/1/サイト名/web/openpne/webapp/lib/util/util.php on line 668 という感じでOpenpneのログイン画面でエラーが出てきたのですが どうしたら良いでしょうか?

  • PHPの吐くデバッグ行番号の見方を教えてください。

    PHP入門者です。 まだ自分でスクリプト開発はできませんが、 サンプルスクリプトを改造しながら自習中です。 デバッグエラー表示で、このような行番号が出てくれるのは とても助かるんですが、 PHP Error Message Warning: Invalid argument supplied for foreach() in /home/user/public_html/include.php on line 127 この場合127行目を探しても該当しそうな間違いが発見できなくて 悩んでいます。 どうも、少しずつ行番号表示が実際のスクリプトファイルとずれて いることに薄々気づき始めました。 実際のスクリプトにはコメントとか色々入ってますから、 多分コメントは引き算した行数なのかな?とは思ってるんですが。 それでも間違えた心当たりの無い行に行き着いたりします。 デバッグが指示してくれる行番号とは、具体的にどの行を指摘して くれていることになりますでしょうか? こんなレベルの私ですが、どうかお助けください。

    • ベストアンサー
    • PHP
  • エラーの原因について

    エラーの原因について 以下のエラーが表示されますがPHP自体は動作するようです。 PHPプログラムの画面の下に表示されます。 Warning: Invalid argument supplied for foreach() in /home/アカウント/public_html/clz/acc.php on line 1535 Warning: Invalid argument supplied for foreach() in /home/アカウント/public_html/clz/acc.php on line 1557 回避策をご存知の方は、ご指導よろしくお願い致します。

    • ベストアンサー
    • PHP
  • OpenOffice Basicで引数を2つ利用する関数が作れません

    OpenOffice Basicで引数を2つ利用する関数が作れません Open Office Calc 3.1.1を使っています。 できれば複数(3つ以上)引数を取る関数を作りたいのですが、 2つ引数を取ろうとすると演算結果が#NAME?になってしまいます。 切り分けにシンプルな関数を作ってみました。 以下で=test2(3,5)とすると結果が#NAME?になります。 Function test2(arg1 As Integer, arg2 As Integer) as Integer test2 = 3 + arg2 End Function #なお、関数内の演算内容はtest2 = arg1 + arg2でも変わらず#NAME?です 切り分けで以下を作ると=test3(3)で6が返されます Function test3(arg1 As Integer) as Integer test3 = 3 + arg1 End Function 関数名のタイプミスの可能性を排除するために、 test2関数を名前を換えずに引数の数を1つに変更してみると 計算できるのでタイプミスではないと思います。 やはり引数を複数とる取り方に問題があるように見えます。 お手数ですが何かアドバイスいただけないでしょうか?

専門家に質問してみよう