PHP 打印调用堆栈信息

WBOY
Lepaskan: 2016-06-20 12:32:51
asal
2164 orang telah melayarinya

在PHP中发生错我,我们使用set_error_handler进行处理,如果发生异常,则使用set_exception_handler,但是在调试中,我们也可以使用

debug_print_backtrace和debug_backtrace进行调用堆栈信息打印

set_error_handler的使用

<?php// error handler functionfunction myErrorHandler($errno, $errstr, $errfile, $errline){    if (!(error_reporting() & $errno)) {        // This error code is not included in error_reporting        return;    }    switch ($errno) {    case E_USER_ERROR:        echo "<b>My ERROR</b> [$errno] $errstr<br />\n";        echo "  Fatal error on line $errline in file $errfile";        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";        echo "Aborting...<br />\n";        exit(1);        break;    case E_USER_WARNING:        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";        break;    case E_USER_NOTICE:        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";        break;    default:        echo "Unknown error type: [$errno] $errstr<br />\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 <= 0) {        trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", E_USER_ERROR);    }    if (!is_array($vect)) {        trigger_error("Incorrect input vector, array of values expected", E_USER_WARNING);        return null;    }    $temp = array();    foreach($vect as $pos => $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");?>
Salin selepas log masuk

set_exception_handler的使用

<?phpfunction exceptionHandler($exception) {    // these are our templates    $traceline = "#%s %s(%s): %s(%s)";    $msg = "PHP Fatal error:  Uncaught exception '%s' with message '%s' in %s:%s\nStack trace:\n%s\n  thrown in %s on line %s";    // 打印异常调用堆栈信息    $trace = $exception->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);}?>
Salin selepas log masuk


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan