【问题标题】:Unable to investigate core files generated by programs built by GCC 4.6.x on Solaris无法调查由 GCC 4.6.x 在 Solaris 上构建的程序生成的核心文件
【发布时间】:2011-12-27 01:29:38
【问题描述】:

我们无法调试 C/C++ 程序核心文件(该程序由 GCC 4.6.1 构建),即使使用调试版本,虽然 file 命令显示调试信息和符号可用。

即使配置了正确的调试可执行文件,该符号在 gdb 中也根本不可读。任何人都可以对此有所了解吗?

顺便说一句,“mdb”或“adb”也无法分析核心文件。每次 adb 启动时,都会生成一个新内核。

使用 gdb 调试会产生如下错误:

warning: Cannot initialize thread debugging library: Debugger service failed
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers

还尝试从源代码构建 gdb,但没有运气。在启动 gdb 之前添加“LD_PRELOAD=/usr/lib/libpthread.so.1”也不起作用(实际上该程序与 -lpthread 链接)。

【问题讨论】:

  • 是 C 还是 C++? C++ 编译可以进行名称修饰
  • 它是一个包含 C++ 代码的程序,而我认为名称修改在这里并不麻烦。
  • @alk 感谢您的提示,尽管我们已经在团队中使用工具包 (mdb/adb) 超过 2 年了。现在的问题是每次我启动 adb 时,它都会在 /tmp 文件夹中为自己生成一个新核心。似乎 librtld_db 无法使用 GCC 4.6 正确加载。
  • 试试这篇文章:fayewilliams.com/2013/01/31/…

标签: c debugging gcc gdb solaris


【解决方案1】:

要接收可用的核心文件,请确保在链接到可执行文件之前,您的源代码已使用 -g 选项进行编译。

要加载核心,请调用:

gdb executable-which-the-core-was-created-from core-file

【讨论】:

  • 如果使用 GNU 编译器:-ggdbX 有帮助
  • @piotr:所有这些都假设您使用gcc(来自与gdb 相同的版本)。
  • 是的,该程序是使用 -g 选项构建的,甚至尝试从源代码 (7.3.1) 构建 gdb。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 2012-09-27
  • 2017-05-01
相关资源
最近更新 更多