我有一个可执行文件,可通过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()
。在研究网络上调试这段代码的方法时,我在这里和那里发现了可以预期的注释。似乎有人在work之前(大约2011年)做了一些工作,但对于我来说他们走了多远并不明显。
除了打印语句(这在我的实际情况中不是一个选择),是否有人看到我可以遵循的调试策略?