Как эффективно сравнить два похожих файла трассировки PHP xdebug? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть два файла трассировки xdebug, около 25 МБ каждый. Одна из них привела к ошибке, и я пытаюсь найти место, где отклоняются две последовательности выполнения. Проблема в том, что между двумя файлами, которые я хочу игнорировать, есть куча несущественных различий, таких как номера удаленных портов, время запросов и другая статистика базы данных.

Моя первая попытка решить эту проблему состояла в том, чтобы открыть трассируйте файлы в Excel и удаляйте время выполнения, которое в большинстве случаев очевидно различается. Затем я попытался использовать приложения сравнения / слияния, чтобы избавиться от других несущественных различий. Например, я заменил удаленные номера портов в обоих файлах строкой-заполнителем PORT_NUMBER. Некоторые из различий повторяются снова и снова, поэтому мне нужно иметь возможность искать и заменять глобально. Проблема в том, что все приложения, которые я пробовал, очень медленные и часто делают sh. Они не могут обрабатывать рендеринг с переносом слов, поиском и заменой или даже простым редактированием с файлами такого большого размера.

Я пробовал многие приложения для сравнения / объединения, включая DiffMerge, WinMerge, KDiff3, Meld, Notepad ++, Eclipse и Visual Studio Code. Я не думаю, что совместное использование diff и sed сработает, потому что мне нужно видеть различия между строками и быстро переходить к разным частям большого файла. Я также должен был бы скопировать и вставить различия из diff для использования в sed, и они используют другой терминал для sed. Есть также специальные символы и очень длинные строки, поэтому я не думаю, что sed - это хороший вариант.

Я бы хотел найти способ использовать файлы трассировки для определения точки отклонения в выполнении. последовательность.

1 Ответ

1 голос
/ 18 февраля 2020

Лучший способ сделать это - иметь два «компьютеризированных» файла трассировки (это xdebug.trace_format=1). Этот формат разделен табуляцией, что облегчает написание скрипта, который просматривает их и выполняет сравнение. Вы также можете игнорировать аргументы для методов / функций и c, а также даже сравнивать возвращаемые значения, если для этого вам потребуется sh.

В каталоге contrib Xdebug есть мини-скрипт ( https://github.com/xdebug/xdebug/blob/master/contrib/tracefile-analyser.php), который показывает немного о том, как это сделать.

Если вы не можете создать их снова, тогда вы будете готовы к гораздо более сложной задаче. Первое, что я хотел бы сделать, это удалить все аргументы (с помощью регулярного выражения). VIM, вероятно, будет вашим лучшим выбором для обработки двух файлов размером 25 МБ.

...