yii 跟踪PHP“内存不足”错误

am46iovg  于 2022-11-09  发布在  PHP
关注(0)|答案(4)|浏览(169)

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

von4xj4u

von4xj4u1#

在我的例子中,这是因为我有无限的函数递归。当我向PHP添加xDebug扩展时,由于函数调用限制,它抛出了一个精确的错误。

km0tfn4u

km0tfn4u2#

xdebug来配置你的应用程序。它应该告诉你哪个函数被调用了多久,它消耗了多少内存。

rhfm7lfc

rhfm7lfc3#

请记住,由于存在致命的内存错误,很难进行调试,原因很简单,您可能没有足够的内存来运行调试器。
例如,如果我还有100个字节,我就不能运行太多,所以你的关机功能的结果会有所不同。
至于你的行号不存在,是不是这个文件正在运行eval(),拉入另一个文件或者输出一些可能导致行号错误的东西?我会读一下那个文件和调用文件,看看它是如何运行的。抱歉,我不能再帮你了,我对Yii框架不熟悉。

nszi6y05

nszi6y054#

使用shutdown函数是不可能从一个致命错误中找到回溯跟踪的,因为这个函数是从PHP生命周期中调用的,而不是从其他代码中调用的。因此,您的stacktrace是正确的--这是shutdown函数的stacktrace,它是空的:(

相关问题