Профилировщик 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 .
Другие вопросы по тегам