linux - GDB 不会中断动态加载的 .so 文件?

标签 linux gdb shared-libraries

在我的 Linux 系统中,我正在编写一个在运行时动态加载一些 .so 库的程序。是这样的:可执行程序在开始运行时,会在某个目录下搜索,然后加载该目录下的所有.so文件。请注意可执行文件和 .so 是独立构建的,可执行文件的构建链接到 .so 文件。

我的问题是:在我运行附加了 GDB 的程序(因此所有 .so 库都已加载)之后,我似乎能够在 .so 文件中的代码上设置断点(GDB 提示我这个断点设置在一个共享库中),但这个断点实际上从未中断过。

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

最佳答案

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

关于linux - GDB 不会中断动态加载的 .so 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910426/

相关文章:

c - 在 GDB 中打印当前语句

c++ - 使用共享库编译可执行文件时,仅链接所需的符号

Android:动态加载共享库

c++ - 在 GDB 中隐含此参数

linux - 为什么 shell 解释单引号内的字符?

c++ - 非阻塞套接字上的挂起程序

c - 如何在程序完成工作后删除.exe输出文件

c++ - 很难让 GDB 加载调试符号

android - 如何符号化剥离的共享库的堆栈跟踪

c - 为什么添加变量后.bss段没有增加?