У меня есть исполняемый файл, который загружает общую библиотеку с dlmopen
,
Вот main.cpp:
int main(int argc, char* argv[]) {
void* h=dlmopen(LM_ID_NEWLM,"libA.so", RTLD_LOCAL | RTLD_NOW);
if(h != 0) {
void (*pPrint)() = (void (*)())dlsym(h, "printA");
if (pPrint != 0)
pPrint();
else
std::cerr << "Did not find function\n";
} else {
std::cerr << "Cannot load shared library\n";
return 100;
}
return 0;
}
И вот A.cpp
создание библиотеки:
extern "C" void printA() {
std::cout << "Hello world!\n";
return;
}
Я скомпилировал этот код с g ++ 6.3.1.
Если вы попытаетесь следить за выполнением этого кода с GDB (Я пробовал с 8.1.0) или же DBX, вы заметите, что вы не можете погрузиться в printA()
, Исследуя в Интернете способы отладки этого фрагмента кода, я нашел тут и там комментарии о том, что это ожидается. Кажется, некоторые люди сделали некоторые Работа Некоторое время назад (около 2011 года), чтобы заставить это работать, но для меня не очевидно, как далеко они зашли.
Кроме заявлений на печать, которые на самом деле не подходят для моего реального случая, кто-нибудь видит стратегию отладки, которой я мог бы следовать?
Задача ещё не решена.
Других решений пока нет …