PHP 打印调用堆栈信息
程序员文章站
2022-03-24 16:49:12
...
在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);}?>
上一篇: vim使用技巧——快速编辑篇
下一篇: PHP安全-密码嗅探
推荐阅读
-
哪个PHP 的IDE可以查看调用堆栈的效果?
-
调用微信企业号接口发送通报信息的PHP代码
-
destoon供应信息title调用出公司名称的方法_php实例
-
php 调用ffmpeg获取视频信息的简单实现
-
php 调用ffmpeg获取视频信息的简单实现
-
php+mysqli实现将数据库中一张表信息打印到表格里的方法,mysqli表格
-
php 如何查看当前系统动态配置信息,不是init_get,因为可能调用了init_set
-
浅谈在linux kernel中打印函数调用的堆栈的方法
-
php+mysqli实现将数据库中一张表信息打印到表格里的方法_php技巧
-
php5.2调用sql server2008里由于打印出来的是DateTime Object不是正常的时间也不是时间戳