Адрес функции C++ - с использованием dladdr и backtrace()

Я хочу использовать backtrace () и получить адрес функции для цели трассировки. Я хочу сохранить адрес функции из backtrace () во время выполнения и использовать его для последующего анализа (например, загрузить имя функции назад, посмотреть статистику вызовов и т. Д. С помощью dladdr ()). При этом я пытался посмотреть на статический адрес функции-члена класса.

Alib.so, ах:

class A
{
public:
    void print_addr();
};

a.cpp

#include "A.h"
#include <iostream>

void A::print_addr()
{
   std::cout << (void*)&A::print_addr << std::endl;
}

main.cpp

#include <iostream>
#include "Alib/A.h"

int main()
{
   std::cout << (void*) &A::print_addr << std::endl;
   // if put the line below, with the line above, output is the same
   // It seems whenever the code pull in &A::print_addr into main, addr is 
   // always the same.  Only different if print .so itself
   // A a; a.print_address();
   return;
}

это выводит:

0x400870

Если я перезапущу основной файл несколько раз, он даст мне один и тот же адрес. Если я изменю main.cpp на это:

int main()
{
   A a;
   a.print_addr();
   return 0;
}

Выходные данные меняются каждый раз, когда я запускаю основной исполняемый файл, даже без перекомпиляции.so или main:

0x7fae48524aa0

Причина, по которой я проверяю это, заключается в том, что я хотел бы использовать backtrace (), чтобы получить информацию о функции (адрес) текущей функции стека для трассировки, и она действует очень похоже. Я попытался вызвать backtrace () внутри библиотечной функции.so и получить символьную информацию о функции, используя backtrace () и dladdr () в текущей функции стека. Печать адреса функции в.so по сравнению с выполнением в main дает другой адрес. Как я могу использовать адрес функции для dladdr () для получения информации, такой как имя символа?

Есть ли что-то, чтобы адрес функции-члена класса отображался по-разному в.so и в main ()?

РЕДАКТИРОВАТЬ: Перефразировать и дать больше примеров кода, чтобы объяснить проблему.

0 ответов

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