无法调试共享库 - 符号未正确加载

Rag*_*geD 13 c++ debugging gdb shared-libraries debug-symbols

我目前正在写一个小型库,我想检查它是否有泄漏(除其他外); 但是,由于某种原因,gdb没有加载库符号.我已经在这里阅读了许多其他帖子(以及互联网上的其他各个地方),但是,我似乎无法找到解决方案.这是正在发生的事情:

我正在使用以下标志编译共享库(这些标志包含在最终的共享库以及所有目标文件中):

CFLAGS=-Wall -O0 -g -fPIC
Run Code Online (Sandbox Code Playgroud)

同样,我正在编译二进制文件memtest(库的客户端应用程序)以检查内存泄漏等,并使用这些标志

CFLAGS=-Wall -O0 -g
Run Code Online (Sandbox Code Playgroud)

现在,我将一个NULL指针插入到库中以测试我是否可以跟踪它并"调试"指针(即它使它崩溃).所以我尝试通过gdb运行它,但这是不行的.info sharedlibrary可执行文件和核心的输出相同:

(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
... Some libraries I am not worried about debugging...
0x00d37340  0x00d423a4  Yes (*)     /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0 <--- My lib
.... and some more....
(*): Shared library is missing debugging information.
Run Code Online (Sandbox Code Playgroud)

如您所见,它没有加载调试信息.我不确定为什么会这样.我用-g旗子构建并连接了所有东西,我甚至尝试过-ggdb,-g3但似乎没有任何东西可以正常工作.当我加载核心转储时,这就是我所看到的:

...some libs...
Reading symbols from /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0...done.
Loaded symbols for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Reading symbols from /usr/lib/libstdc++.so.6...(no debugging symbols found)...done.
...some more libs...
Run Code Online (Sandbox Code Playgroud)

请注意我的图书馆不会(no debugging symbols found)出错 - 任何人都有任何想法的原因?正如我之前所说,我无法通过运行程序gdb ./memtest或调试核心文件来调试它.

谢谢你的帮助.

编辑它也可能是重要的注意,(如果你没有通过路径实现)这个库是本地共享库(即我使用-Wl,-rpath链接/加载)

EDIT2我的GDB版本似乎已经过时了.现在,我已经从CVS服务器更新到最新版本(我也尝试过最新版本version 7.2),它可以"加载"符号.我info sharedlibrary现在读到这个:

0x00e418b0  0x00e4be74  Yes         /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Run Code Online (Sandbox Code Playgroud)

但是,我仍然无法单步执行任何功能(在共享库中) - 任何人都有任何想法?

EDIT3我也尝试逐步链接静态库(libMyLIB.a),但它仍然无法正常工作.我的操作系统是CentOS 5.6; 有谁知道这个系统的任何问题?另外,只是另一个确认我的符号被加载(由于某种原因它不能单步执行任何共享的lib函数)

(gdb) sharedlibrary MyLIB
Symbols already loaded for /home/raged/MyLIB/memtest/../lib/libMyLIB.so.0
Run Code Online (Sandbox Code Playgroud)

Rag*_*geD 3

我发现这不起作用的原因:我正在调用旧函数调用来初始化测试可执行文件中的指针。由于该对象从未被创建,我永远无法进入图书馆。一旦我更新了函数调用,一切都运行良好。

也就是说,如果有人在所有符号似乎都已加载时遇到类似问题,请务必检查所有指针是否已正确初始化,即使它们具有正确的类型。