在我的 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/