【问题标题】:How can I compare two similar PHP xdebug trace files efficiently?如何有效地比较两个相似的 PHP xdebug 跟踪文件?
【发布时间】:2020-02-17 18:51:36
【问题描述】:

我有两个 xdebug 跟踪文件,每个大约 25 MB。其中一个导致了错误,我试图找到两个执行序列偏离的位置。问题是我想忽略的两个文件之间存在一堆不相关的差异,例如远程端口号、查询时间和其他数据库统计信息。

我第一次尝试解决这个问题是在 excel 中打开跟踪文件并删除大部分时间明显不同的执行时间。然后我尝试使用比较/合并应用程序来消除其他不相关的差异。例如,我用占位符字符串 PORT_NUMBER 替换了两个文件中的远程端口号。一些差异会一次又一次地重复,所以我需要能够全局搜索和替换。问题是我尝试过的所有应用程序都非常慢并且经常崩溃。他们无法处理自动换行、搜索和替换的渲染,甚至无法对这么大的文件进行简单的编辑。

我尝试了许多比较/合并应用程序,包括 DiffMerge、WinMerge、KDiff3、Meld、Notepad++、Eclipse 和 Visual Studio Code。我不认为一起使用 diff 和 sed 会起作用,因为我需要查看内联差异并快速跳转到大文件的不同部分。我还必须复制并粘贴与 diff 的差异以在 sed 中使用,并且他们为 sed 使用另一个终端。还有特殊字符和极长的行,所以我认为 sed 不是一个好的选择。

我想找到一种方法来使用跟踪文件来找到执行序列中的偏差点。

【问题讨论】:

  • 如果你熟悉 linux 终端中的 vim,你可以使用 vimddiff,它允许你通过 cat 命令隐藏一些列:vimdiff <(cut -c10-14,110- file1) <(cut -c10-14,110- file2)

标签: php merge compare xdebug trace


【解决方案1】:

最好的方法是拥有两个“计算机化”的跟踪文件(xdebug.trace_format=1)。这种格式是制表符分隔的,这样可以更轻松地编写一个遍历它们并进行比较的脚本。您也可以忽略方法/函数等的参数,如果您愿意,甚至可以比较返回值。

在 Xdebug 的 contrib 目录 (https://github.com/xdebug/xdebug/blob/master/contrib/tracefile-analyser.php) 中有一个迷你脚本,其中显示了一些关于如何执行此操作的信息。

如果您无法再次创建它们,那么您将面临更艰巨的任务。我要做的第一件事是去掉所有参数(使用正则表达式)。 VIM 可能是处理两个 25MB 文件的最佳选择。

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多