使用gdb调试动态加载的库

时间:2016-02-22 10:46:19

标签: c++ debugging dll gdb dynamic-library

我正在尝试调试一个将动态库作为插件加载的应用程序,并遇到gdb问题以找到源文件并在源级别放置断点。

我构建了一个动态库(libFoo.so),它是用静态库(libBar.a)编译的。

在构建libFoo.so之后,它被移动到我的主应用程序的plugins目录中,该目录位于不同的文件夹中。

在运行时,应用程序启动并查找此目录,然后加载libFoo.so。所有代码都使用调试信息构建,并为动态库正确加载调试信息。

让我感到困惑的是,源代码信息没有加载到libFoo的gdb中。这意味着当代码破解为libFoo函数时,我无法看到带有list的源代码或设置断点

但是,来自libBar的源代码信息(在libFoo.so中静态链接)是完全加载的,当从libBar破解代码并在libBar的代码中放置断点时我可以看到源代码......

更准确地说,这是gdb向我展示共享库的内容:

(gdb) info sharedlibrary Foo
From   To     Syms Read   Shared Object Library
0x...  0x...  Yes         /path/to/mainapp/plugins/libFoo.so

好的,所以我的lib加载了调试符号。

(gdb) info sources
Source files for which symbols have been read in:
... 
/path/to/mainapp/src/main.cpp
/path/to/plugins/libs/bar/bar.cpp
...

因此,gdb正确加载了来自libBar.a的源代码,即使它与可执行文件位于不同的文件夹中,但不是来自与它一起构建的libFoo?

我还尝试在gdb中添加libFoo的{​​{1}}源代码目录,但无济于事。

在哪里可以帮助gdb建立libFoo与其源之间的链接? 我可以显式指定源文件(而不仅仅是dir的目录)吗?或者我有一些选择吗?

0 个答案:

没有答案
相关问题