如何调试没有错误消息的错误?

时间:2010-11-02 21:34:26

标签: php mysql apache debugging

如何调试没有错误消息的错误?

加载PHP页面时,我在Firefox中收到此错误。

The connection to the server was reset while the page was loading.

它没有说明除了它似乎是Apache崩溃之外的其他原因。

Apache错误日志显示:

[Wed Nov 03 10:23:04 2010] [notice] Parent: child process exited with status 3221225477 -- Restarting.
[Wed Nov 03 10:23:06 2010] [notice] Digest: generating secret for digest authentication ...
[Wed Nov 03 10:23:06 2010] [notice] Digest: done
[Wed Nov 03 10:23:06 2010] [notice] Apache/2.2.14 (Win32) DAV/2 mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
[Wed Nov 03 10:23:06 2010] [notice] Server built: Nov 11 2009 14:29:03
[Wed Nov 03 10:23:06 2010] [notice] Parent: Created child process 5100
[Wed Nov 03 10:23:07 2010] [notice] Digest: generating secret for digest authentication ...
[Wed Nov 03 10:23:07 2010] [notice] Digest: done
[Wed Nov 03 10:23:07 2010] [notice] Child 5100: Child process is running
[Wed Nov 03 10:23:07 2010] [notice] Child 5100: Acquired the start mutex.
[Wed Nov 03 10:23:07 2010] [notice] Child 5100: Starting 150 worker threads.
[Wed Nov 03 10:23:07 2010] [notice] Child 5100: Starting thread to listen on port 80.
[Wed Nov 03 10:23:07 2010] [notice] Child 5100: Starting thread to listen on port 80.

我尝试搜索3221225477代码但发现没有任何效果。

Windows事件查看器也显示了这一点:

Faulting application name: httpd.exe, version: 2.2.14.0, time stamp: 0x4aeb9704
Faulting module name: php5ts.dll, version: 5.3.1.0, time stamp: 0x4b06c41d
Exception code: 0xc0000005
Fault offset: 0x00082391
Faulting process id: 0x8f4
Faulting application start time: 0x01cb7b85fa74bf83
Faulting application path: C:\xampp\apache\bin\httpd.exe
Faulting module path: C:\xampp\php\php5ts.dll
Report Id: 73996201-e779-11df-938f-e0cb4e5b154a

当我打电话时会发生这种情况:

return mysql_fetch_object($result, $class_name);

当我使用$_SESSION

时,它也会发生在另一个页面上

如果我切换到使用CGI而不是php5ts.dllphp5apache2_2.dll我得到:

Premature end of script headers: php-cgi.exe

它只发生在一些页面上。其他人工作正常。

  • 不会发生PHP错误或异常。错误报告设置为E_ALL & ~E_NOTICE & ~E_DEPRECATEDdisplay_errors已开启。
  • 超时设置为60秒,错误页面返回约10秒钟。
  • 内存使用量约为16MB,最大限制为256MB。
  • PHP 5.3.1,Windows 7 64位。

那么有谁知道如何有效地调试此错误?

6 个答案:

答案 0 :(得分:2)

看起来您遇到了PHP中的错误,导致崩溃。尝试升级到最新的每晚构建(http://snaps.php.net/)。如果这没有帮助,请尝试get a backtrace并在bugs.php.net上提交错误。

答案 1 :(得分:2)

好吧,您可以先阅读"Generating a Backtrace"并搜索与您类似的已注册PHP错误报告,如果您确实没有找到错误,则提交错误。如果您真的感兴趣,可以检查PHP Source并提出补丁。

答案 2 :(得分:0)

似乎脚本需要很长时间才能执行,因此浏览器会超时。尝试使用php函数set_time_limit来防止脚本死亡。

set_time_limit(0); // no time limit

答案 3 :(得分:0)

如果apache崩溃,可能是由于.htaccess损坏了。在错误消息/崩溃之前是否有任何日志条目来指示Apache认为它在做什么?

答案 4 :(得分:0)

升级您的PHP。

(这就是我所做的,现在它似乎有效,但我的问题仍然存在:我如何有效地调试这些问题?)

答案 5 :(得分:0)

http://bugs.php.net/bugs-getting-valgrind-log.php

[EDIT2] http://en.wikipedia.org/wiki/Strace也可以方便地找到让您关闭系统的地方。

[编辑] 你是如何监控内存使用情况的?