【发布时间】:2014-05-27 10:54:14
【问题描述】:
我正在使用 xhprof 来分析应用程序。我需要知道的是每个函数来自哪个文件,因为有些函数是全局的,有些函数有重复的名称(这是遗留代码,不要判断!;)从我所看到的 xhprof 不会返回此数据它的输出,还有人知道吗?
我希望我不必修改 xhprof 的源代码来返回这些数据...:-)
感谢您的帮助!
【问题讨论】:
标签: xhprof
我正在使用 xhprof 来分析应用程序。我需要知道的是每个函数来自哪个文件,因为有些函数是全局的,有些函数有重复的名称(这是遗留代码,不要判断!;)从我所看到的 xhprof 不会返回此数据它的输出,还有人知道吗?
我希望我不必修改 xhprof 的源代码来返回这些数据...:-)
感谢您的帮助!
【问题讨论】:
标签: xhprof
只想说一下我是如何解决这个问题的,以防其他人觉得它有用。
最后我不得不修改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 实现中解析此输出很容易 - 您只需将字符串分解为 |分别获取文件路径和函数名。
希望这会有所帮助!
【讨论】: