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 부터 가능하죠

관련자료

등록된 댓글이 없습니다.
Today's proverb
남을 비난하는 것만큼 쉬운 일은 없다. 어떤 일이 그릇되었다는 것을 아는 데는 그리 많은 것이 필요하지 않다. 하지만 어떻게 하면 그것을 다시 바르게 할 수 있는가를 아는 데는 남다른 눈썰미가 있어야 한다. (빌 로저스)