【问题标题】:Can't debug shared library with gdb无法使用 gdb 调试共享库
【发布时间】:2022-01-11 13:50:32
【问题描述】:

当我使用 GDB 附加到进程时,我看到了警告:

Reading symbols from /CloneFileSystem/lib/ld-uClibc.so.0...
(No debugging symbols found in /CloneFileSystem/lib/ld-uClibc.so.0)
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.

即使我使用 set sysroot /CloneFileSystem 和那里的所有库,也无济于事。

我的进程调用共享库中的函数以及该函数调用另一个共享库中的另一个函数。

例如 ProcessFunc-> Lib1Func -> Lib2Func

我想调试 Lib2Func 但是当我运行命令时 b Lib2Func gdb can't set a breakpoint there event that library is already loaded

file myexe -> interpreter /lib/ld-uClibc.so.0

当我在 GDB 中使用 info sharedlibrary 时,我不能在 From 和 To 中输入值(加载的地址为空)

【问题讨论】:

  • 您克隆的 sysroot 中是否有动态加载程序(ld.so 或 ld-linux.so 或其他)?运行file ./myexe 以查看为./myexe 指定的动态加载程序。
  • @n.1.8e9-where's-my-sharem。当我在这个 exe 上运行 file 时,我得到了 interpreter /lib/ld-uClibc.so.0 并且我在 lib 中有这个文件(我更新了我的帖子)

标签: linux debugging gdb shared-libraries


【解决方案1】:

您可能想尝试使用 -g 选项重新编译库。它说它找不到调试信息。 -g 如果您使用 gcc,则提供调试信息。这是我要检查的第一件事。如果图书馆很大,这可能需要一段时间。

【讨论】:

  • 我无法重新编译库:)
  • 我想我明白了。那么你只有编译过的二进制文件吗?我认为如果没有源代码,您将无法使用 gdb 执行此操作。您可能必须使用传统的 IDE 调试器(如果您只想调试代码),即使 gdb 更酷。我想我不久前尝试查看 gdb 中的 c stdlib 函数时遇到了类似的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多