我有一个加载共享库的可执行文件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 年)做了一些工作来让它发挥作用,但这对我来说并不明显他们走了多远。
除了打印语句(这在我的真实案例中并不是一个真正的选项)之外,有没有人看到我可以遵循的调试策略?