Как получить имена функций из адресов профиля?

Я собираю профилировщик производительности в 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, как если бы это была функция!

Другие вопросы по тегам