4

我有一个加载共享库的可执行文件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 年)做了一些工作来让它发挥作用,但这对我来说并不明显他们走了多远。

除了打印语句(这在我的真实案例中并不是一个真正的选项)之外,有没有人看到我可以遵循的调试策略?

4

0 回答 0