跟踪PHP"内存不足"错误

时间:2012-11-06 14:03:15

标签: php debugging yii

我正在使用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。

3 个答案:

答案 0 :(得分:4)

在我的情况下,这发生了,因为我有无限的函数递归。当我将xDebug扩展添加到PHP时,由于函数调用限制,它会引发准确的错误。

答案 1 :(得分:1)

使用xdebug配置您的应用。它应该告诉你哪个函数被调用的次数以及它所占用的内存量。

答案 2 :(得分:0)

请记住,由于致命的内存错误,很难调试,因为您可能没有足够的内存来运行调试器。

例如,如果我剩下100个字节,我将无法运行太多。因此,关闭功能的结果会有所不同。

现在您的行号不存在..文件是否可能正在运行eval(),拉入另一个文件或输出可能导致错误行号的内容?我会读取该文件和调用文件,看看它是如何运行的。对不起,我无法继续,我不熟悉Yii框架。