GDB不打破dynamic加载.so文件?

在我的Linux系统中,我正在编写一个运行时dynamic加载一些.so库的程序。 就像这样:当开始运行时,可执行程序将在特定目录下search,然后加载该目录中的所有.so文件。 请注意 ,可执行文件和.so是独立构build的,可执行文件的构build链接到.so文件。

我的问题是:在运行程序(因此所有.so库已经加载)与GDB连接后, 我似乎能够在.so文件中的代码设置一个断点 (GDB提示我,这个断点是设置在一个共享库中), 但是这个断点从来没有真正的中断。

我应该如何让这些断点真正起作用? 在debugging会话期间,我在正确的位置提供了所有源代码,并且-g选项处于打开状态。 编译时我也删除了-O2优化。

检查调试信息是否正确加载.so文件。 查看命令(gdb) info sharedlibrary的输出。 如果您的库在加载的库表中以星号(*)符号出现,那么调试符号不会被加载,并且gdb无法在此.so中的断点处停止。

也许你的功能从来没有被调用。 在共享库的入口点(主程序用dlsym获取的函数)放置一个断点。 我刚刚证实,我的gdb (7.1)停在这样的断点。

如果你确定你的函数被调用了(比如说它产生了一些你可以看到的独特的输出),但是你设置的断点没有被触发,那么这是gdb的一个bug,它应该被报告给gdb维护者。