LINUX.ORG.RU
решено ФорумAdmin

Как отловить segfault в php скрипте?

 ,


0

1

Доброго времени суток.

Сразу оговорюсь, что я не программист и скорее всего не буду исправлять код, мне как админу нужно только собрать максимум информации об ошибке.

Есть web приложение на php для внутренних задач и при определённых действиях одна из страниц падает в сегфолт. Ошибка 100 % воспроизводится. Есть тестовый стенд на котором можно вообще всё ( менять код, менять способ запуска mod_php <-> mod_fcgid, вешать МПХ на главную страницу )

Можно ли получить подсказку, какой именно php код выполнялся перед сегфолтом? Если собирать обычный core dump, в нём будут машинные инструкции и не поймёшь какая именно функция была в них транслирована. set_error_handler, насколько я понимаю, не работает для сегфолта.

★★★★★

впринципе что мешает запустить код как cgi выставив переменные окружения и сделать strace php file.php

visual ★★★
()
Ответ на: комментарий от visual

Если ничего не останется - попробую. Но опять же придётся гадать, какой именно php код привёл к системному вызову

router ★★★★★
() автор топика

Есть web приложение на php для внутренних задач и при определённых действиях одна из страниц падает в сегфолт. Ошибка 100 % воспроизводится. Есть тестовый стенд на котором можно вообще всё ( менять код, менять способ запуска mod_php <-> mod_fcgid, вешать МПХ на главную страницу )

проще всего навставлять в код echo __LINE__, до тех пор, пока ошибка не отловится. :)

drBatty ★★
()

Нашёл set_exception_handler, сейчас попробую

router ★★★★★
() автор топика
Ответ на: комментарий от router

я return вставлял. Пришёл к большой и страшной функции, надоело.

какой смысл в return? echo __LINE__ покажет, какие строчки программа УЖЕ прошла. Наверное у вас там что-то выедает МНОГО памяти, вот оно и падает. ИМХО. Или там бесконечная рекурсия.

drBatty ★★
()
Ответ на: комментарий от drBatty

Ограничился return и var_dump'ами. Проблемное место всё-таки нашёл.

router ★★★★★
() автор топика
Ответ на: комментарий от drBatty

какой смысл в return? echo __LINE__ покажет, какие строчки программа УЖЕ прошла.

Скрипт выполнялся веб-сервером. Если segfault, то - «удалённый сервер сбросил соединение», и то что уже передано просто не отображается.

router ★★★★★
() автор топика
Ответ на: комментарий от router

странно, у меня вроде отображалось. Сегфолта на пхп добиться сложно, но для опытного быдлокодера нет ничего невозможного.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.