使用dlmopen打开的库的调试策略

时间:2018-07-30 10:58:02

标签: c++ c gdb shared-libraries dbx

我有一个可执行文件,可通过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年)做了一些工作,但对于我来说他们走了多远并不明显。

除了打印语句(这在我的实际情况中不是一个选择),是否有人看到我可以遵循的调试策略?

0 个答案:

没有答案