我在Linux中组装了一个性能分析器,在将收集到的堆栈跟踪信息映射到函数名时遇到了问题。
我正在调用addr2line,如下所示
FILE* pipe = popen("addr2line -f -i -s -C -e <libname> <address>", "r");
if (!pipe) return;
const size_t BUFFER_SIZE = 8192;
char buffer[BUFFER_SIZE];
string result;
while (!feof(pipe))
{
if (fgets(buffer, BUFFER_SIZE, pipe) != NULL)
result += buffer;
}
pclose(pipe);
然而,这是非常缓慢的,因为我的个人资料有很多样本。有没有像addr2line这样的其他实用程序更快,或者我可以用比现在更有效的方式调用addr2line?
最佳答案
通过修改addr2line实用程序的源代码并将其转换为库,我克服了这个问题。所以我现在将这个库加载到我的配置文件分析器中,并调用“addr2line”,就好像它是一个函数一样!