我正在使用Yii框架构建应用程序,并且我正在尝试确定内存不足错误的原因。是否有可能获得堆栈跟踪?我尝试过像......这样的事情。
function handleShutdown() {
debug_print_backtrace();
$error = error_get_last();
$info = "[SHUTDOWN] file:".$error['file']." | ln:".$error['line']." | msg:".$error['message'] .PHP_EOL;
echo $info;
}
register_shutdown_function('handleShutdown');
但是debug_print_backtrace()除了
外没有显示任何内容#0 handleShutdown()
[SHUTDOWN] file:C:\Users\bkuhl\htdocs\instaLabel\yii-1.1.12\base\CModule.php | ln:530 | msg:Allowed memory size of 67108864 bytes exhausted (tried to allocate 65488 bytes)
我检查了CModule.php,该文件中没有行号530。它只到518。
答案 0 :(得分:4)
在我的情况下,这发生了,因为我有无限的函数递归。当我将xDebug扩展添加到PHP时,由于函数调用限制,它会引发准确的错误。
答案 1 :(得分:1)
使用xdebug配置您的应用。它应该告诉你哪个函数被调用的次数以及它所占用的内存量。
答案 2 :(得分:0)
请记住,由于致命的内存错误,很难调试,因为您可能没有足够的内存来运行调试器。
例如,如果我剩下100个字节,我将无法运行太多。因此,关闭功能的结果会有所不同。
现在您的行号不存在..文件是否可能正在运行eval(),拉入另一个文件或输出可能导致错误行号的内容?我会读取该文件和调用文件,看看它是如何运行的。对不起,我无法继续,我不熟悉Yii框架。