【问题标题】:How to trace PHP errors?如何跟踪 PHP 错误?
【发布时间】:2011-07-03 00:21:28
【问题描述】:

我收到以下错误:

[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() 函数)。

如何追溯此错误的来源?

【问题讨论】:

标签: php debugging error-handling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    看看php函数:

    set_exception_handler()
    set_error_handler()
    debug_backtrace();
    

    希望对你有帮助, 问候, 欧文·汉杰斯

    【讨论】:

      【解决方案3】:

      如果您在从数据库中选择数据时内存不足,您可能会尝试一次从数据库中获取太多数据并将其全部加载到内存中。您的 Database Read() 方法是否会自动获取数据并将其全部放入变量中?

      您可能应该考虑以增量方式处理数据,作为一次性获取所有数据的替代方法,或者使用较小的数据集。另一方面,如果您有能力这样做并且您确实需要一次处理如此多的数据,您可以考虑更改内存限制并使用ini_set('memory_limit', '256M'); 将其增加,例如将其增加到 256MB。

      见:

      http://php.net/manual/en/ini.core.php#ini.memory-limithttp://php.net/ini_set

      编辑

      为了弄清楚你是如何走到这一步的,就免费解决方案而言,Xdebug 可能是你最好的选择。我来看看:http://www.xdebug.org/docs/execution_trace

      xdebug.show_mem_delta 选项可能最有利于您在查看堆栈跟踪时找出导致内存使用量激增的原因。

      【讨论】:

      • 我理解该错误的原因,但我不知道它到底发生在哪里,因为该类的第 60 行在我的项目中使用了大约 200 次。某处必须有一些 SQL 语句获取太多数据。我需要本地化它。我的 DB 类没有问题。
      • 编辑在使用 xdebug 时添加了几个特定项目。希望对您有所帮助。
      【解决方案4】:

      您可以尝试使用http://www.xdebug.org/

      【讨论】:

      • XDebug 将完全满足您的需求。为您提供完整的堆栈跟踪和所有内容。
      【解决方案5】:

      这很可能正是问题发生的地方 - 您的脚本几乎占用了 128 兆字节的限制,然后数据库类尝试分配更多空间来从数据库中读取某些内容,超过限制并且脚本吐槽。

      你在做什么需要使用 128meg 的内存?

      【讨论】:

      • 我了解该错误的原因,但我不知道它到底发生在哪里,因为该类的第 60 行在我的项目中使用了大约 200 次。
      • 你在做什么需要这么多内存?
      • 嗯,我不知道。我正在使用对象关系映射器,因此我无法完全手动控制它生成的 SQL 查询的情况。这就是为什么我需要以某种方式追溯导致此错误的 SQL 语句。 XDebug 不是一个选项,因为我在不允许安装 PHP 扩展的托管服务器上。
      • echo memory_get_usage() 调用你的代码,并开始追踪使用量上升的地方。这就是我能想到的所有追踪它被吸收的地方。我会特别关注您实际运行查询的区域,以及这些查询的日期被消耗的地方。
      猜你喜欢
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2015-03-15
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多