Как отлаживать ошибки, которые не имеют сообщения об ошибке?
Как отлаживать ошибки, у которых нет сообщения об ошибке?
При загрузке страницы 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.dll
и php5apache2_2.dll
, я получаю:
Premature end of script headers: php-cgi.exe
Это происходит только для некоторых страниц. Другие работают нормально.
- Ошибки или исключения PHP отсутствуют. Отчет об ошибках устанавливается на
E_ALL & ~E_NOTICE & ~E_DEPRECATED
. display_errors
включен.
- Таймаут установлен на 60 секунд, страница с ошибкой возвращается примерно через 10 секунд.
- Использование памяти составляет около 16 МБ, максимальный предел - 256 МБ.
- PHP 5.3.1, Windows 7 64bit.
Так кто-нибудь знает, как эффективно отладить эту ошибку?
Ответы
Ответ 1
Хорошо, вы можете начать с чтения "Создание обратной линии" и поиска зарегистрированных отчетов об ошибках PHP, похожих на вас, и отправки ошибки, если вы действительно ничего не нашли. Если вам действительно интересно, вы можете проверить Источник PHP и предложить патч.
Ответ 2
Похоже, вы испытываете ошибку в PHP, что приводит к сбою. Попробуйте обновиться до последней ночной сборки (http://snaps.php.net/). Если это не поможет, попробуйте получить обратную трассировку и отправить ошибку на bugs.php.net.
Ответ 3
Похоже, что script занимает много времени, поэтому браузер отключается. попробуйте использовать функцию php set_time_limit, чтобы сохранить script от смерти.
set_time_limit(0); // no time limit
Ответ 4
Если apache рушится, это может быть связано с искаженным .htaccess. Есть ли запись в журнале перед сообщением об ошибке/сбоем, чтобы указать, что Апач думал, что это делает?
Ответ 5
Обновите свой PHP.
(Это то, что я сделал, и теперь это работает, однако мой вопрос по-прежнему стоит: как эффективно отлаживать такие проблемы?)
Ответ 6
http://bugs.php.net/bugs-getting-valgrind-log.php
[edit2]
http://en.wikipedia.org/wiki/Strace также может быть удобно найти место, которое приведет вас к системе.
[править]
как вы отслеживали использование памяти?