【发布时间】:2011-08-02 10:11:00
【问题描述】:
在我的 Linux 系统中,我正在编写一个在运行时动态加载一些 .so 库的程序。就像这样:可执行程序在开始运行时会在特定目录下搜索,然后加载该目录下的所有 .so 文件。请注意可执行文件和 .so 是独立构建的,并且可执行文件的构建不链接到 .so 文件。
我的问题是:在我运行附加了 GDB 的程序(因此所有 .so 库都已加载)后,我似乎能够在 .so 文件中的代码上设置断点(GDB 提示我此断点设置在共享库中),但此断点实际上从未中断。
我应该如何使这些断点真正起作用? 在调试会话期间,我在正确的位置拥有所有可用的源代码,并且 -g 选项处于打开状态。我在编译时也去掉了 -O2 优化。
【问题讨论】:
-
GDB 给出的关于断点在 SO 中的提示是什么?我没有看到这样的消息。也许是“使断点在未来共享库加载时挂起?(y 或 [n])”消息?如果是这样,那是因为 GDB 不知道您的符号。
-
您介意显示相关代码吗?特别是
dlopen()调用(标志)和后续使用。
标签: linux gdb shared-libraries