Профилировщик Xdebug не работает?
Я использую XAMPP, и я настроил его, чтобы иметь виртуальные хосты для каждого проекта, который я создаю локально.
В моем php.ini я включил xdebug, и мои скрипты работают правильно. Я имею в виду, что всякий раз, когда появляется предупреждение, уведомление, ошибка, сообщается xdebug.
Теперь я хотел бы включить профилировщик Xdebug и внести в свой php.ini следующие изменения, чтобы профилировщик Xdebug мог сгенерировать файл журнала:
; xdebug.profiler_enable
; Type: integer, Default value: 0
; Enables Xdebugs profiler which creates files in the profile output directory. Those files can be
; read by KCacheGrind to visualize your data. This setting can not be set in your script with ini_set
; ().
xdebug.profiler_enable = 1
; xdebug.profiler_output_dir
; Type: string, Default value: /tmp
; The directory where the profiler output will be written to, make sure that the user who the PHP
; will be running as has write permissions to that directory. This setting can not be set in your
; script with ini_set().
xdebug.profiler_output_dir ="D:\Web Development Projects\Profile"
Я перезагружаю свой Apache, но все же, когда я запускаю свои скрипты, в папке Profile не создается файл.
Есть ли что-то еще, что я должен сделать?
Я прочитал это, чтобы включить Profiler: http://xdebug.org/docs/profiler
После некоторых исследований я добавляю этот код в конец index.php в установке WordPress, установленной на моем сервере:
echo xdebug_get_profiler_filename();
После запуска WordPress в нижнем колонтитуле я получаю такой результат:
D:/Web Development Projects/Profile/xdebug_profile._::1320916508_018294
но когда я иду в папку
D:/Web Development Projects/Profile/
файл там не появился? Любая идея?
5 ответов
Прежде всего, вам нужно убедиться, что пользователь, под которым работает ваш веб-сервер, действительно имеет права на запись в указанный вами каталог - и он должен существовать. Также возможно, что Xdebug не любит пробелы в путях, хотя это должно работать нормально, я бы попробовал установить:
xdebug.profiler_output_dir = "D:/Web Development Projects/Profiler"
Поскольку \ + char может быть escape-последовательностью.
Проблема решена!
Проблема возникла из-за имени файла журнала.
Я просто изменил это на:
xdebug.profiler_output_name = "callgrind.out.%t-%s"
и работает правильно!
У меня была похожая проблема с Fedora Linux v.32. Настройка была правильной, однако я не смог найти дамп профилировщика в /tmp.
Это было вызвано функцией безопасности RedHat Linux: PrivateTmp, представленной также в Fedora 16 и новее.
Это означает, что процессы, запущенные с этим флагом, будут видеть уникальный /tmp, отличный от того, который пользователи и другие демоны видят или могут получить к ним доступ.
В моем случае уникальный каталог был:
/tmp/systemd-private-05139aa229424bc389df850760710371-php-fpm.service-vLI9Th
Если вы работаете в Linux, убедитесь, что вы не в PrivateTmp, в противном случае все написано в / tmp, проверьте этот который объясняет линк,PrivateTmp
Попробуйте добавить
xdebug.mode = develop,profile
в php.ini
а также распечатать информацию с помощью
echo xdebug_info();
Я думаю, что в версии 3 они изменили параметры, как показано здесь: https://xdebug.org/docs/profiler .
Также новая опция
xdebug.output_dir = "Path..."
Итак, это вся моя конфигурация с XDebug 3.
zend_extension = "D:\Dev\XAMPP\php\ext\php_xdebug-3.1.4-7.3-vc15-x86_64.dll"
xdebug.remote_enable=1
xdebug.remote_host="localhost"
xdebug.remote_port=9003
xdebug.mode = develop,profile
xdebug.profiler_output_name = "callgrind.out.%t-%s"
xdebug.output_dir = "D:\Dev\XAMPP\php\tmp"
Обратите внимание, что xdebug.mode и xdebug.output_dir
И я запускаю сервер так
php -d max_execution_time=30000 -S 127.0.0.1:80 -t .