Я пытаюсь использовать xdebug, чтобы определить, что вызывает медленную загрузку страницы, и снимок профилировщика не показывает достаточную глубину на вкладке дерева вызовов (я использую PhpStorm).
Вкладка дерева вызовов выглядит следующим образом:
index.php
..
..
my_file.php
function1
function2
...
Он показывает, что my_file.php занимает более 90% времени, но он недостаточно углублен в дерево вызовов, чтобы я мог увидеть, какие функции занимают время. В основном я могу понять это на вкладке статистики выполнения, которая показывает каждую отдельную функцию, но было бы здорово, если бы вкладка дерева вызовов углубилась.
Есть ли настройка, позволяющая это сделать?
Вот мои настройки xdebug:
[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_name = "callgrind.out.%t-%s"xdebug.profiler_output_dir = "E:\wamp\www\xdebug_profiler"xdebug.max_nesting_level = 500
xdebug.var_display_max_depth = 100
xdebug.var_display_max_data = 1024
Я только что получил канонический ответ от Дерика Ретанса, автора xdebug, и похоже, что мой ответ был действительно правильным! Из переписки в списке рассылки xdebug-general:
Привет народ,
Есть ли ограничение на глубину стека вызовов в профилировании?
особенность xdebug?Нет, нет
Используя PHP Storm в качестве внешнего интерфейса, я вижу, что my_file.php занимает более 90%
времени, но график не идет достаточно глубоко в дереве вызовов, чтобы
Посмотрите, какие функции занимают время.Я знаю, что kcachegrind не показывает вещи, если они занимают меньше, чем
5% по умолчанию. Возможно, phpstorm тоже это делает?Я могу видеть, какие функции занимают больше всего времени в
вкладка статистики выполнения, однако было бы неплохо посмотреть, как работает код
прибывает в мошеннический вызов функции.Трудно увидеть для меня, без файла профиля, и указатель, как что
вы ожидаете …
Это интересный вопрос и любопытно, где может быть введено ограничение. Причина в том, что PHP встроен debug_backtrace
печатает всю трассировку стека по умолчанию. $limit
аргумент был добавлен только в 5.4 …
Также скимминга Исходный код xdebug Я не видел ни значения, ни кода, который бы ограничивал сбор стека вызовов. Тем не менее, я не видел ни одной опции конфигурации, чтобы повлиять на количество вызовов функций, перехваченных профилировщиком …
Таким образом, короткий ответ нет.
Хотя некоторые мысли и предложения
die(print_debug_backtrace())
из этой функции. Это должно дать вам трассировку стека до указанной мошеннической функции.xdebug.profiler_output_dir
перед загрузкой страницы при сборе профиля. Если имеется несколько выходных файлов, обязательно проверьте их все в пользовательском интерфейсе cachegrind. Вдоль этих строк подумайте о добавлении случайного значения xdebug.profiler_output_name = "callgrind.out.%t-%s-%r"
просто исключить файлы, перезаписывающие друг друга (это случилось со мной и может быть очень расстраивает как только понимаешь что это проблема).Рассмотрим настройки
xdebug.var_display_max_depth
Для более высокого значения (по умолчанию 3).
Другие переменные, которые могут быть установлены, перечислены здесь:
http://xdebug.org/docs/all_settings#var_display_max_depth