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
마음이 열린 사람이 껴안지 못할 현실이란 없다. 불가능이란 깨달은 이에게 이미 존재하지 않는다.