如何跟踪PHP错误?

如何跟踪PHP错误?,php,debugging,error-handling,Php,Debugging,Error Handling,我得到以下错误: [23-Feb-2011 19:51:29] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 512 bytes) in /obj/class.db.php on line 60 我的问题是我不知道这个错误发生在哪里。class.db.php的第60行是我的应用程序中使用最多的函数之一(Database Read()函数) 如何追溯此错误的来源 这很可能就

我得到以下错误:

[23-Feb-2011 19:51:29] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 512 bytes) in /obj/class.db.php on line 60
我的问题是我不知道这个错误发生在哪里。class.db.php的第60行是我的应用程序中使用最多的函数之一(Database Read()函数)


如何追溯此错误的来源

这很可能就是问题发生的地方-您的脚本占用了几乎所有的128MB限制,然后数据库类试图分配更多的空间来从数据库读取内容,超出了限制,脚本就会死机


你在做什么,需要使用128兆内存

如果从数据库中选择数据时内存不足,您可以尝试使用

,很可能是您试图一次从数据库中获取太多数据,并试图将其全部加载到内存中。您的Database Read()方法是否会自动获取数据并将其全部放入变量中

您可能应该考虑增量处理数据,作为一种替代方法,一次抓取数据,或者使用较小的数据集。另一方面,如果你有能力这样做,你真的需要同时处理这么多的数据,你可以考虑改变内存限制,并使用<代码> iNySeT('MexyyLimeLime','256m’)来增加内存限制;例如,code>将其增加到256MB

见:

编辑

就免费解决方案而言,Xdebug可能是您找到这一点的最佳选择。我想看看:


查看堆栈跟踪时,xdebug.show_mem_delta选项可能最有助于您了解内存使用率的峰值。

在php中,您可以设置自己的异常处理程序和错误处理程序,另请参阅php.net上的文档。当发生错误时,您可以打印回溯并将其转储到文件或屏幕

看看php函数:

set_exception_handler()
set_error_handler()
debug_backtrace();
希望有帮助, 格里茨,
Erwin Haantjes

您可以尝试使用获取错误的堆栈跟踪。

您可能想看看:您可以获取调用堆栈。。。是否尝试搜索@php.net?debug\u backtrace另一个好信息的方法是创建自己的ExceptionHandler。。。这里的例子:我理解这个错误的原因,但我不知道它到底发生在哪里,因为那个类的第60行在我的项目中使用了大约200次。你在做什么,需要这么多内存?嗯,我不知道。我使用的是对象关系映射器,所以我无法完全手动控制它生成的SQL查询。这就是为什么我需要追溯哪个SQL语句导致了这个错误。XDebug不是一个选项,因为我所在的托管服务器不允许安装PHP扩展。请在代码中添加
echo memory\u get\u usage()
调用,并开始跟踪使用率上升的地方。这就是我所能想到的,追踪它被吸的地方。我会特别关注您实际运行查询的区域,以及使用这些查询的日期的区域。我理解该错误的原因,但我不知道它到底发生在哪里,因为该类的第60行在我的项目中使用了大约200次。一定有某个SQL语句获取了太多的数据。我需要把它本地化。我的DB类没有问题。在使用xdebug时,编辑以添加两个特定项。希望对您有所帮助。XDebug将完全满足您的需要。。提供完整的堆栈跟踪和所有内容。