4

我正在使用 xhprof 来分析应用程序。我需要知道的是每个函数来自哪个文件,因为有些函数是全局的,有些函数有重复的名称(这是遗留代码,不要判断!;)从我所看到的 xhprof 不会返回此数据它的输出,还有人知道吗?

我希望我不必修改 xhprof 的源代码来返回这些数据...... :-)

谢谢你的帮助!

4

1 回答 1

4

只是想说我是如何解决这个问题的,以防其他人发现它有用。

最后我不得不修改xhprof源,但这是一个小改动。

在 xhprof.c 中,找到一个名为 *hp_get_function_name 的函数,并将以下内容添加到变量列表的开头“int len;”之后 :

  char              *finalName = NULL;
  int                finalLen;

然后在该函数的末尾,交换显示“return ret;”的行 为了

finalLen = strlen(ret) + strlen(ops->filename) + 10;
finalName = (char*)emalloc(finalLen);
snprintf(finalName, finalLen, "%s|%s", ops->filename, ret);

return finalName;

这将在每个函数名称前面加上管道 ( | ) 的文件路径,例如 /path/to/foo.php|foo==>bar (没有这个修改 xhprof 将只输出 foo==>bar)。

自从我完成 C 编程以来已经有一段时间了,所以可能有更好的方法来做这件事,但它为我完成了这项工作。

然后在您的 iXHProfRuns 实现中解析此输出很容易 - 您只需将字符串分解为 | 分别获取文件路径和函数名。

希望这可以帮助!

于 2014-06-16T10:30:38.883 回答