Как узнать в каком месте зависла программа на PHP?
PHP 5.3.1 что-то меня разочаровывает. Висит (по крайней мере под Windows XP) в самых неожиданных местах. Кстати, эти зависания подтолкнули меня к поиску способа, которым можно было бы отследить где зависла программа.
Способ проще некуда: ставим модуль PHP xdebug, прописываем его в php.ini (не забываем, что в PHP 5.3 всегда используется «zend_extension»), а в исследуемой программе указываем:
xdebug_start_trace('/какой/то/путь/имя-лога', XDEBUG_TRACE_APPEND);
После зависания идём в указанную папку и смотрим в лог, последняя строка в нём и есть источник зависания.
ну да, под nix-ами для это цели бывает полезен strace
Комментарий для overplumbum.livejournal.com:
Я тоже люблю strace, но системный вызов не скажет на какой строке в программе повис PHP, он просто покажет чем интерпретатор занимается, например, ждёт освобождения семафора.
Xdebug хорош тем, что он показывает конкретную функцию в программе, с его помощью я увидел, что у меня висит функция crypt.
А у тебя xdebug’овский var_dump() нормально в PHP 5.3 работает?
Комментарий для slaver.info:
Да, вполне нормально. У меня Xdebug v2.1.0beta2-dev.
Комментарий для Евгения Степанищева:
А какие настройки в php.ini прописаны? Я на двух серверах (и win, и nix) не могу разобраться с xdebug под PHP 5.3 :(
Комментарий для slaver.info:
Всё незатейливо:
zend_extension=«Z:\usr\local\php5\ext\php_xdebug.dll»
[xdebug]
xdebug.remote_enable = On
Комментарий для Евгения Степанищева:
Спасибо!
Я просто не ту VC-версию для win использовал :)
Комментарий для slaver.info:
Бывает :)
О, на шикарный баг xdebug для PHP 5.3 сейчас нарвался. Помучался полчаса, пока не погуглил: http://bugs.xdebug.org/view.php?id=532
Пофиксили, но ещё не выложили официально.
Комментарий для slaver.info:
Неприятно, да.