Как получить имена функций из адресов профиля?
Я собираю профилировщик производительности в 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 более эффективно, чем я?
1 ответ
Я решил эту проблему, изменив исходный код утилиты addr2line и преобразовав его в библиотеку. Теперь я загружаю эту библиотеку в свой анализатор профилей и вызываю addr2line, как если бы это была функция!