【发布时间】: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 正确加载。
标签: c debugging gcc gdb solaris