6

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

4

3 回答 3

4

就我而言,这是因为我有无限的函数递归。当我将 xDebug 扩展添加到 PHP 时,由于函数调用限制,它抛出了一个准确的错误。

于 2012-11-07T15:27:28.900 回答
1

使用xdebug 分析您的应用程序。它应该告诉您调用哪个函数的频率以及它占用了多少内存。

于 2012-11-06T22:55:01.383 回答
0

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

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

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

于 2012-11-06T14:27:54.070 回答