PHP-debug_backtrace()崩溃-我能做什么?

PHP-debug_backtrace()崩溃-我能做什么?,php,debug-backtrace,Php,Debug Backtrace,我查看了我能找到的信息,但没有找到一个似乎有用的答案。我有一个例程,它调用debug_backtrace(),然后循环遍历元素,以一种很好的格式为我的日志输出它们。这在大多数情况下都很有效 在某些调用中,系统只是挂起。假设: $curStack = debug_backtrace(); foreach ($curStack as $myStackLevel) { $test = gettype($myStackLevel); // code to write out contents o

我查看了我能找到的信息,但没有找到一个似乎有用的答案。我有一个例程,它调用debug_backtrace(),然后循环遍历元素,以一种很好的格式为我的日志输出它们。这在大多数情况下都很有效

在某些调用中,系统只是挂起。假设:

$curStack = debug_backtrace();
foreach ($curStack as $myStackLevel) {
  $test = gettype($myStackLevel);
  // code to write out contents of $myStackLevel
  // Log that we are getting the next item
}
// Log that the foreach is done
在某些情况下,PHP只是死掉了——我可以看到它处理当前项的日志,但它在foreach行崩溃(或者至少在我可以通过编程查看下一个$myStackLevel的内容之前)

在这里的一条消息中,我看到了一些关于递归调用和使用serialize的信息,但是我不能使用serialize(我使用PDO,并且有一条消息“您不能序列化或取消序列化PDO实例”),所以这就不存在了

有趣的是,如果它崩溃,PHP错误系统仍然提供堆栈的完整转储…(我在尝试使用serialize时发现了这一点)

感谢您的帮助

谢谢


JustMeToo

您是否试图输出
对象
元素的内容?很可能您有一个递归对象图,导致PHP进程溢出堆栈或运行时间过长。

您正在运行什么版本的PHP?如果它是一个实际的PHP错误,升级可能会有所帮助。我正在运行PHP 5.2.10。我是planning希望转到5.3.x,但在其他一些问题得到解决之前,它无法运行……当它到达foreach的末尾时,它似乎会挂起—我在末尾记录一条消息,然后在gettype()之后再次记录-我在结尾看到了一个,但在gettype之后没有看到。我确信这是一个递归项,但我不知道如何通过挂起的gettype()(我正在使用它来确定如何测试递归类型项)。我确信有人已经遇到了这个问题,并且有了解决方案……我就是找不到它。@JustMeToo-
gettype()
永远不应该挂起。如果注释掉除了
echo gettype(…)
之外的所有内容,会发生什么情况?另外,您应该在堆栈中的对象上调用
gettype()
,而不是在堆栈跟踪元素本身上。您可以使用调试器逐步查看到底发生了什么吗?