2009-08-14 6 views
0

Мой вопрос основан на this article.Использовать данные профилирования Xdebug2 при отладке PHP Ubuntu

Как вы можете сделать профилирование данных о PHP-коде Xdubug2, а затем поместить его в приложение, подобное KCacheGrind?

Я успешно использовал Xdebug в своем Ubuntu, поскольку он выделяет мои сообщения об ошибках в браузере. Тем не менее, я не нашел никакого терминального инструмента, такого как xdebug.

Я хотел бы иметь визуальное представление о моем PHP кода, как этот

alt text

+1

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

+0

Я автор ссылки на статью. Изображение было hotlinked на моем сервере, и я настроил apache, чтобы этого не было. У меня, таким образом, загружено изображение на imgur.com, где hotlinking допускается и даже поощряется. – pilif

ответ

4

Добавьте эту строку в ваш php.ini

xdebug.profiler_enable = 1

Затем, если вы случайно запустить PHP через веб-сервер, вам необходимо перезапустить веб-сервер, в противном случае изменение конф не захватывается вверх.

Если вы используете PHP через cli, тогда, конечно, перезагрузка не требуется.

Теперь, когда вы запускаете свой PHP-скрипт, файл cachegrind.out.PID создается в каталоге, указанном в настройке xdebug.profiler_output_dir php.ini. По умолчанию это/tmp.

Это файлы, которые может загрузить kcachegrind.

Есть другие средства для вызова этого поколения профиля, вы можете прочитать о них в http://www.xdebug.org/docs/all_settings#profiler_enable

1

я столкнулся с подобной ситуацией, когда я только имел доступ к терминалу, а не к визуальной среде, на которой можно протестировать. Хуже того, я использовал машину для Windows и Putty.

Решение Доступных

  1. Установка WebGrind (http://code.google.com/p/webgrind/)
  2. Запуск Xdebug и копирование файлов cachegrind.out на машину, где у вас есть зритель похожего на Cachegrind.

Для меня ответ был сделан на SCP файлы cachegrind на мою локальную машину Windows и с помощью WinCachegrind, чтобы посмотреть на них. Вы можете SCP их на свой Linux-модуль и запустить KCacheGrind в файлах. Недостатком этого является то, что у вас может не быть такой же файловой структуры, поэтому вы не сможете просмотреть исходный код. Если у вас есть источник также на вашем локальном компьютере или вы можете его получить, вы также можете исправить это. Откройте файлы cachegrind в vim (или другом редакторе) и выполните глобальный поиск и замените их на пути, чтобы изменить их на правильный исходный путь на вашем локальном компьютере.

Надеюсь, это то, что вы искали.

EDIT для адреса комментарий:

Если вы работаете, чтобы получить callgrind файл, который несколько отличается. Для этого вам нужно работать в Linux (что, я думаю, вы есть), и иметь программы callgrind и valgrind. Последнее, что можно предположить здесь, это то, что вы используете PHP как мод Apache, а не каким-то другим способом. Используйте инструмент callgrind для начала apache, а затем запустите запрос в браузере. Это даст вам подробную информацию не только о дереве вызовов php, но и о многих вещах в Apache, которые могут вызывать проблемы.

вот пример

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/httpd -X 

-х начнет апача в режиме отладки только один поток. Отсюда откройте веб-браузер и нажмите скрипт php, который вы хотите. Затем вернитесь и выключите апач. Это также должно завершиться разборкой callgrind.

Если вам не нужен апач или веб-браузер, вы можете попробовать запустить callgrind только с помощью команды PHP

sudo callgrind --dump-instr=yes --trace-jump=yes -v /usr/sbin/php my_php_script.php 

Это должно дать вам те же результаты, но без всех апачи вещи.

+0

Я получаю работу WebGrind. PHP - это язык, который не нужно компилировать. ** Как вы можете сделать файл callgrind.out скрипта PHP, если вы не можете использовать 'gcc -pg'? ** –

+1

, если вы пытаетесь получить callgrind, а не cachegrind, это другое дело. Ответ изменен для комментариев. –

+1

Masi, Callgrind - это вариант для вальгринда. Извините за путаницу. На машине у меня есть, установка callgrind сделала «callgrind» доступной как команда, которая была просто псевдонимом «valgrind --tool = callgrind». Попробуйте это sudo valgrind --tool = callgrind --dump-instr = yes --trace -jump = yes -v/usr/sbin/php my_php_script.php –