Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Как узнать в каком месте зависла программа на PHP?

PHP 5.3.1 что-то меня разочаровывает. Висит (по крайней мере под Windows XP) в самых неожиданных местах. Кстати, эти зависания подтолкнули меня к поиску способа, которым можно было бы отследить где зависла программа.

Способ проще некуда: ставим модуль PHP xdebug, прописываем его в php.ini (не забываем, что в PHP 5.3 всегда используется «zend_extension»), а в исследуемой программе указываем:

xdebug_start_trace('/какой/то/путь/имя-лога', XDEBUG_TRACE_APPEND);

После зависания идём в указанную папку и смотрим в лог, последняя строка в нём и есть источник зависания.

10 комментариев
overplumbum.livejournal.com 2010

ну да, под nix-ами для это цели бывает полезен strace

Евгений Степанищев (bolknote.ru) 2010

Комментарий для overplumbum.livejournal.com:

Я тоже люблю strace, но системный вызов не скажет на какой строке в программе повис PHP, он просто покажет чем интерпретатор занимается, например, ждёт освобождения семафора.

Xdebug хорош тем, что он показывает конкретную функцию в программе, с его помощью я увидел, что у меня висит функция crypt.

Slaver (slaver.info) 2010

А у тебя xdebug’овский var_dump() нормально в PHP 5.3 работает?

Евгений Степанищев (bolknote.ru) 2010

Комментарий для slaver.info:

Да, вполне нормально. У меня Xdebug v2.1.0beta2-dev.

Slaver (slaver.info) 2010

Комментарий для Евгения Степанищева:

А какие настройки в php.ini прописаны? Я на двух серверах (и win, и nix) не могу разобраться с xdebug под PHP 5.3 :(

Евгений Степанищев (bolknote.ru) 2010

Комментарий для slaver.info:

Всё незатейливо:

zend_extension=«Z:\usr\local\php5\ext\php_xdebug.dll»

[xdebug]
xdebug.remote_enable = On

Slaver (slaver.info) 2010

Комментарий для Евгения Степанищева:

Спасибо!
Я просто не ту VC-версию для win использовал :)

Евгений Степанищев (bolknote.ru) 2010

Комментарий для slaver.info:

Бывает :)

Slaver (slaver.info) 2010

О, на шикарный баг xdebug для PHP 5.3 сейчас нарвался. Помучался полчаса, пока не погуглил: http://bugs.xdebug.org/view.php?id=532
Пофиксили, но ещё не выложили официально.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для slaver.info:

Неприятно, да.