欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP 打印调用堆栈信息

程序员文章站 2022-04-27 22:18:01
...
在PHP中发生错我,我们使用set_error_handler进行处理,如果发生异常,则使用set_exception_handler,但是在调试中,我们也可以使用 debug_print_backtrace和debug_backtrace进行调用堆栈信息打印

set_error_handler的使用

My ERROR [$errno] $errstr
\n"; echo " Fatal error on line $errline in file $errfile"; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n"; echo "Aborting...
\n"; exit(1); break; case E_USER_WARNING: echo "My WARNING [$errno] $errstr
\n"; break; case E_USER_NOTICE: echo "My NOTICE [$errno] $errstr
\n"; break; default: echo "Unknown error type: [$errno] $errstr
\n"; break; } /* Don't execute PHP internal error handler */ return true;}// function to test the error handlingfunction scale_by_log($vect, $scale){ if (!is_numeric($scale) || $scale $value) { if (!is_numeric($value)) { trigger_error("Value at position $pos is not a number, using 0 (zero)", E_USER_NOTICE); $value = 0; } $temp[$pos] = log($scale) * $value; } return $temp;}$old_error_handler = set_error_handler("myErrorHandler");?>

set_exception_handler的使用

getTrace();    foreach ($trace as $key => $stackPoint) {       //返回异常类似,异常描述信息        $trace[$key]['args'] = array_map('gettype', $trace[$key]['args']);    }    // 格式化异常信息    $result = array();    foreach ($trace as $key => $stackPoint) {        $result[] = sprintf(            $traceline,            $key,            $stackPoint['file'],            $stackPoint['line'],            $stackPoint['function'],            implode(', ', $stackPoint['args'])        );    }    // trace always ends with {main}    $result[] = '#' . ++$key . ' {main}';    // write tracelines into main template    $msg = sprintf(        $msg,        get_class($exception),        $exception->getMessage(),        $exception->getFile(),        $exception->getLine(),        implode("\n", $result),        $exception->getFile(),        $exception->getLine()    );    error_log($msg);}?>