Несколько дампов Xdebug для одного запроса - PullRequest
4 голосов
/ 11 марта 2019

Я ожидаю, что мой сервер сделает один дамп Xdebug за запрос, используя php.ini

xdebug.auto_trace=1
xdebug.collect_params=4
xdebug.trace_format=1
xdebug.collect_return=1
xdebug.collect_assignments=1
xdebug.trace_options=0
xdebug.trace_output_dir=/tmp/
xdebug.trace_output_name=xdebug.%R.%U
xdebug.var_display_max_data=16000

Я также выгружаю уникальный идентификатор, сгенерированный Apache, в файл журнала, который показывает:

"GET / HTTP/1.1" "XIZB4KSTHJac6j8l3z6SOwAAAAA"

Пока все хорошо - одна запись в журнале должна означать один файл журнала. Однако моя папка дампа Xdebug теперь содержит более одного дампа xdebug:

xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.0943bc.xt  xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.0e4362.xt
xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.0c6269.xt  xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.xt
xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.0363ec.xt  xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.0cb868.xt

Из которых тот, который соответствует xdebug._.XIZB4KSTHJac6j8l3z6SOwAAAAA.xt, кажется законным на основе содержимого. Другие xdebugs намного меньше и, похоже, не содержат основных вызовов, необходимых для обработки запроса. Тем не менее, они кажутся родственными, поскольку у них один и тот же идентификатор.

Что это за дополнительные xdebugs и как я могу объединить их в правильный xdebug (если они действительно связаны с одним и тем же запросом)?

Размещение целых файлов трассировки было бы немного, и я генерирую файлы трассировки в коде, который сам не писал, и поэтому не могу рассказать вам о специфике реализации. Тем не менее, я добавил один из коротких «странных» файлов трассировки.

Version: 2.6.0
File format: 4
TRACE START [2019-01-08 19:53:33]
1       1119    0       0.056006        797816  MyBB->__destruct        1               /opt/bitnami/apps/mybb/htdocs/inc/class_core.php        0       0
2       1120    0       0.056014        797816  function_exists 0               /opt/bitnami/apps/mybb/htdocs/inc/class_core.php        590     1       'run_shutdown'
2       1120    1       0.056021        797816
2       1120    R                       TRUE
2       1121    0       0.056026        797816  run_shutdown    1               /opt/bitnami/apps/mybb/htdocs/inc/class_core.php        592     0
2       1121    1       0.056032        797816
1       1119    1       0.056035        797816
1       1119    R                       NULL
                        0.056350        38208
TRACE END   [2019-01-08 19:53:33]

1 Ответ

0 голосов
/ 21 марта 2019

Из вашего примера и некоторых исследований по теме я МОЖЕТ найти ответ на поведение, которое вы описали:

Как указано в https://stackoverflow.com/a/17995870/2833639, функции завершения работы заканчиваются из "нормального" стека запросов, а debug_backtrace () из зарегистрированной функции отключения в PHP в основном говорит нам, что вы не можете отследить внутри функция отключения.

Ваш пример трассировки говорит, что был вызван метод деструктора Объекта класса "MyBB".

Мое предположение здесь заключается в том, что деструкторы объектов, такие как функции выключения, обрабатываются из «нормального» стека, поэтому Xdebug создает разные файлы трассировки для каждой отдельной трассировки запроса (обычная трассировка + x вызовов выключения / деструктора). Конечно, я ничего не нашел в документах по этому поводу, но из-за характера уничтожения объектов это кажется довольно правдоподобным. Скорее всего, эти отдельные следы происходят после ответа HTTP-запроса, но это зависит от конкретной реализации.

(я знаю, что ответы не должны основываться на догадках или предположениях, но я чувствовал, что это может быть полезно здесь, поэтому не стесняйтесь доказать, что я прав или нет в этом вопросе)

...