【问题标题】:No symbol table info available没有可用的符号表信息
【发布时间】:2013-02-07 15:25:11
【问题描述】:

我正在测试来自第三方的库,但它崩溃了。当我想查看崩溃的原因时,我的 gdb 告诉我没有可用的调试符号

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb53ffb70 (LWP 3722)]
0x00172a89 in tsip_transac_send () from /usr/local/lib/libtinySIP.so.0

我在 gdb 控制台上发出 bt full 并得到一系列如下所示的行

#0  0x00172a89 in tsip_transac_send () from /usr/local/lib/libtinySIP.so.0
No symbol table info available

我在检查 Makefile 中的 CFLAGS 后重新编译了库。这些值一直都很好,但我还是重新编译了它

CFLAGS = -g -O2

我以同样的运气再次运行测试,共享库没有调试符号。

我在这里错过了什么?

我使用的是 Centos 6.0,之前我在 Opensuse 中安装了该库,但我没有遇到这个问题。这可能与我的 Centos 安装有关。

以防万一,我正在测试 Doubango 的 webrtc2sip 库。

编辑: 调试符号正在正确加载

(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
0x002fb830  0x0031339f  Yes (*)     /lib/ld-linux.so.2
0x00115040  0x00120028  Yes         /usr/local/lib/libtinySAK.so.0
0x00133f30  0x0018b378  Yes         /usr/local/lib/libtinySIP.so.0
0x001d8ac0  0x00201b98  Yes         /usr/local/lib/libtinyNET.so.0
0x00215dd0  0x0023f638  Yes         /usr/local/lib/libtinyDAV.so.0
0x0024eec0  0x00261728  Yes         /usr/local/lib/libtinyMEDIA.so.0
0x0026bb00  0x002774d8  Yes         /usr/local/lib/libtinyHTTP.so.0
0x002ae340  0x002b0358  Yes         /usr/local/lib/libtinyXCAP.so.0
0x002b3990  0x002b8d18  Yes         /usr/local/lib/libtinySMS.so.0
0x002be630  0x002c9388  Yes         /usr/local/lib/libtinyMSRP.so.0
0x002de240  0x002e8e18  Yes         /usr/local/lib/libtinySDP.so.0
0x00323060  0x00345778  Yes         /usr/local/lib/libtinyRTP.so.0

【问题讨论】:

  • 我建议你在库上运行file,看看它在安装时是否被剥离。
  • /usr/local/lib/libtinySIP.so.0.0.0:ELF 32 位 LSB 共享对象,Intel 80386,版本 1 (SYSV),动态链接,未剥离
  • 这篇文章可能会有所帮助。 -> [GDB 说“没有符号表”,但 nm 显示文件有调试符号][1] [1]: stackoverflow.com/questions/19229882/…

标签: linux gdb


【解决方案1】:

嗯,看起来这是 gdb 中的一个错误。

Centos 6 在其存储库中预编译了 7.2-56.el6 版本。我更新(通过编译源代码)到最新版本的 gdb,现在它可以工作了。

感谢大家的帮助。

【讨论】:

  • 这是 gdb 错误跟踪器上的已知错误吗?它是在哪个版本中修复的?哪个版本有问题?
【解决方案2】:

检查file /usr/local/lib/libtinySIP.so.0。如果它显示 stripped,请检查您的 lib 的构建过程。它可以手动调用strip 来去除调试符号。

【讨论】:

  • 未剥离:/usr/local/lib/libtinySIP.so.0.0.0:ELF 32 位 LSB 共享对象,Intel 80386,版本 1 (SYSV),动态链接,未剥离
【解决方案3】:

看来您有冲突的编译标志。我不是专家,但看起来您的-g 标志(用于生成调试符号)与-O2 标志(这是一个优化参数)混合在一起。

尝试仅使用 -g 并发布结果。

【讨论】:

  • 我修改了 Makefile 以删除 -O2 但它仍然以某种方式使用。然后我创建了一个故意段错误的程序,并用“-g -O2”编译它,我能够在整个源代码中进行调试。似乎 -O2 没有引起问题。
  • 我设法删除了 -O2 优化参数。恐怕还是一样:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2023-03-19
  • 2011-03-18
相关资源
最近更新 更多