JSFiddle - React, Tailwind, and code Playground
by angry_bender
JavaScript
Простейший пример, после осознани которого, я, лично, перестал считать трассировщик xdebug-а корректно работающим.
Допустим, у нас есть 2 файла: file_1.php и file_2.php. Они содержат (повторяю, пример совершенно примитивный, но показательный) одну функцию, пусть она называется fn() и ничего не принимает. Ну тогда наши файлы имеют примерно такой код
function fn()
{
}
Полный дзен, да.
Пусть так же у нас есть еще один файл, ну назовем его main_controller.php
Пусть в нем будет функция, которая инклудит один из файлов file_1.php или file_2.php в зависимости от переданного параметра. Функция у нас будет такая:
function a($file)
{
if ($file == 1) {
include __DIR__ . '/file_1.php';
}
else {
include __DIR__ . '/file_2.php';
}
}
А сам код main_controller.php таков:
a(1);
fn();
Суть проблемы: одна и та же функция (класс) может встречаться в нескольких местах - и порою важно КУДА ИМЕННО происходит переход в процессе работы программы, а НЕ ОТКУДА произошел очередной вызов функции/метода.
Если мы врубим стректрейс ПОСЛЕ вызова a(1) - мы увидим такой информативный лог:
TRACE START [2015-01-19 05:26:47]
0.0005 643696 -> fn() /home/kirill/trace/test_2.php:25
0.0006 643744 -> xdebug_stop_trace() /home/kirill/trace/test_2.php:28
0.0006 643784
TRACE END [2015-01-19 05:26:47]
Мы не знаем, где эта функция fn().
Конечно, можно включить трассировку по-раньше и захватить вызов a(1), тогда лог станет уже понятным:
0.0004 642768 -> a() /home/kirill/trace/test_2.php:23
0.0005 644496 -> include(/home/kirill/trace/file_1.php) /home/kirill/trace/test_2.php:14
0.0005 643696 -> fn() /home/kirill/trace/test_2.php:26
Для анализа видимо предлагается парсить строку и тд (есть машиночитаемый формат, да я знаю).
Лично мне принцип логирования в xdebug-е не нравится, поэтому я перевернул его с ног на голову: в моем логгере сохраняется КУДА происходит переход, а не ОТКУДА.
Зачем это надо? Допустим, в некой системе есть...