PHP & Others

debug function

컨텐츠 정보

본문

- debug.inc - 수정 -
function MyErrorHandler($errno, $errstr, $errfile, $errline)
{
      $errname = array(E_ERROR=>'ERROR', E_WARNING=>'WARNING', E_NOTICE=>'NOTICE');

      switch($errno) {
      case E_ERROR:
      case E_WARNING:
      case E_NOTICE:
              echo "<xmp>\\n".$errname[$errno].' : '.$errstr.' : '.$errfile.' : '.$errline."\\n";
              print_r(debug_backtrace());
              exit("\\n</xmp>");
      }
}

if(isset($_DEBUG)) {
      set_error_handler('MyErrorHandler');
}

- 사용예 -
맨 위에
$_DEBUG = true;
include_once 'debug.inc';

- 결과 예 -
Array
(
    [0] => Array
        (
            [file] => ~~~mysql.inc
            [line] => 143
            [function] => MyErrorHandler
        )

    [1] => Array
        (
            [file] => ~~~mysql.inc
            [line] => 143
            [function] => mysql_query
        )
)

이런식으로 인클루드 된 모든파일이 배열로 출력되고 파일마다 몇행에서 멈췄는지 보입니다.
현재는 notice 만 나와도 멈출거라 생각합니다.
리퍼런스에서 set_error_handler 찾으면 쉽게 수정할 수 있습니다.



-----------------------------------------------------------------
알맹이는 이걸로 고쳐야 겠네요.
에러 아닌것들이 걸리는듯.
switch($errno) {
case E_USER_ERROR:
case E_USER_WARNING:
case E_USER_NOTICE:
echo "<xmp>\\n".$errno.' : '.$errstr.' : '.$errfile.' : '.$errline."\\n";
print_r(debug_backtrace());
exit("\\n</xmp>");
}

-----------------------------------------------------------------
E_USER 시리즈는, user_error(); 함수를 콜 할때 필요할것 같습니다.
E_NOTICE 부분이 조금 민감한데.. 프로그램을 주의깊게 코딩하지 않았을 경우 자주 뜨죠.
-----------------------------------------------------------------
http://kr.php.net/manual/en/function.error-reporting.php
아차차...
E_USER시리즈가 그얘기였군요.
case E_ERROR:
case E_WARNING:
case E_NOTICE:
 09/14 20:26:15 
 

PHP 4.3 부터 가능하죠

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
유쾌한 사람은 자기 일에만 몰두하는 사람이 아니다. 때론 자신의 일을 전부 제쳐놓고 타인의 문제에 전력을 쏟는 열정이 있는 사람이다. 타인에게 자신의 힘을 나누어주고 마음을 열어주는 것은 자신의 삶을 행복하게 만드는 방법이다.