Есть ли способ увеличить глубину дерева вызовов профиля xdebug?

Я пытаюсь использовать 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

2

Решение

РЕДАКТИРОВАТЬ

Я только что получил канонический ответ от Дерика Ретанса, автора xdebug, и похоже, что мой ответ был действительно правильным! Из переписки в списке рассылки xdebug-general:

Привет народ,

Есть ли ограничение на глубину стека вызовов в профилировании?
особенность xdebug?

Нет, нет

Используя PHP Storm в качестве внешнего интерфейса, я вижу, что my_file.php занимает более 90%
времени, но график не идет достаточно глубоко в дереве вызовов, чтобы
Посмотрите, какие функции занимают время.

Я знаю, что kcachegrind не показывает вещи, если они занимают меньше, чем
5% по умолчанию. Возможно, phpstorm тоже это делает?

Я могу видеть, какие функции занимают больше всего времени в
вкладка статистики выполнения, однако было бы неплохо посмотреть, как работает код
прибывает в мошеннический вызов функции.

Трудно увидеть для меня, без файла профиля, и указатель, как что
вы ожидаете …

Оригинальный ответ

Это интересный вопрос и любопытно, где может быть введено ограничение. Причина в том, что PHP встроен debug_backtrace печатает всю трассировку стека по умолчанию. $limit аргумент был добавлен только в 5.4 …

Также скимминга Исходный код xdebug Я не видел ни значения, ни кода, который бы ограничивал сбор стека вызовов. Тем не менее, я не видел ни одной опции конфигурации, чтобы повлиять на количество вызовов функций, перехваченных профилировщиком …

Таким образом, короткий ответ нет.

Хотя некоторые мысли и предложения

  1. Используйте вкладку статистики выполнения, чтобы найти мошенническую функцию. Вызов die(print_debug_backtrace()) из этой функции. Это должно дать вам трассировку стека до указанной мошеннической функции.
  2. Снова используя вкладку статистики выполнения, чтобы найти мошенническую функцию, используйте xdebug функция трассировки взять его оттуда (менее желательно, чем пользовательский интерфейс cachegrind, я знаю, но вместо этого …)
  3. Очистить xdebug.profiler_output_dir перед загрузкой страницы при сборе профиля. Если имеется несколько выходных файлов, обязательно проверьте их все в пользовательском интерфейсе cachegrind. Вдоль этих строк подумайте о добавлении случайного значения xdebug.profiler_output_name = "callgrind.out.%t-%s-%r" просто исключить файлы, перезаписывающие друг друга (это случилось со мной и может быть очень расстраивает как только понимаешь что это проблема).
  4. Попробуйте другой визуализатор cachegrind. Хотя я сомневаюсь, что это проблема, кто знает, в крайнем случае, я бы сказал, что стоит попробовать.
  5. Наконец, для канонического ответа, вы можете опубликовать в списке рассылки xdebug [email protected], или спросите самого автора. Они предлагают сначала спросить о SO, что вы и сделали, поэтому список и автор могут быть восприимчивы к запросу. Подробности на Страница поддержки xdebug.
2

Другие решения

Рассмотрим настройки

xdebug.var_display_max_depth

Для более высокого значения (по умолчанию 3).

Другие переменные, которые могут быть установлены, перечислены здесь:
http://xdebug.org/docs/all_settings#var_display_max_depth

2

По вопросам рекламы [email protected]