【问题标题】:GDB produce ?? symbols for segmentaion fault on ubuntuGDB 生产 ?? ubuntu 上的分段错误符号
【发布时间】:2020-12-28 12:10:14
【问题描述】:

我正在尝试在 Ubuntu 服务器上使用 gdb 调试我的 c++ 编程分配应用程序,因为它会产生分段错误。 但文件产生??当我尝试 bt 它给我时,我无法阅读的符号。

(gdb) bt
#0  0x00007f141956d277 in ?? ()
#1  0x00007ffc1a866bd0 in ?? ()
#2  0x000055e1f101d5e0 in ?? ()
#3  0x00007ffc1a866db0 in ?? ()
#4  0x000055e1f1433e70 in ?? ()
#5  0x00007ffc1a866bd0 in ?? ()
#6  0x000055e1f10224a9 in ?? ()
#7  0x000055e1f14341f8 in ?? ()
#8  0x00000001f14344d0 in ?? ()
#9  0x0000000000000000 in ?? ()

我在关注这个link,它告诉我加载这些符号

symbol-file /path/to/my/binary
sharedlibrary

找到sharedlibrary,但符号文件路径不存在。所以,它确实以某种方式改变了bt 命令输出

(gdb) bt
#0  tcache_get (tc_idx=0) at malloc.c:2943
#1  _GI__libc_malloc (bytes=19) at malloc.c:3050
#2  0x000055e1f10224a9 in ?? ()
#3  0x000055e1f14341f8 in ?? ()
#4  0x00000001f14344d0 in ?? ()
#5  0x0000000000000000 in ?? ()

我还是不明白这个错误。

现在,我不知道这是 GDB 的问题,因为没有这个 symbol-file 或者它是一个我不知道如何调试的编译问题,或者这足以让我调试,但我关注的是 Debugging a Segmentation Fault并且排除故障更加清晰。

当我搜索类似的案例时,所有的答案都只是针对他们的案例,而不是如何处理这些错误的通用解决方案。我也想过安装或定位那个符号文件,但我不明白怎么做。

如果有人可以帮助我,我需要了解我的问题是什么以及我应该如何解决它。

注意:核心转储是在/tmp 而非当前应用程序目录中生成的

【问题讨论】:

  • 您是否使用-ggdb3 进行编译?通常这会产生一个带有 gdb 需要的调试符号的可执行文件。您可能还想减少优化,删除 -O3 或类似内容,以使程序集映射更直接地映射到您的源代码。
  • 我不知道如何添加它们..我只是用这个命令编译./Application testcases/singlefailure.conf
  • 糟糕,运行此gdb -c core Application 时不包括应用程序文件位置是我的错,它显示了我的一些代码,除了#1 行查看in malloc.c 以及当我使用up 或@ 时987654338@ 它产生相同的结果。这是什么意思?

标签: c++ segmentation-fault gdb debug-symbols


【解决方案1】:

我在关注这个链接,它告诉我加载这些符号

不要点击此链接(这对您的用例来说过于复杂)。

相反,这样做:

gdb /path/to/my/binary
(gdb) run 

...当你的程序遇到SIGSEGV时GDB会停止

(gdb) bt     # should produce meaningful output now.

【讨论】:

  • 我不明白/path/to/my/binary 指的是什么,我的电脑上没有这个目录。我应该安装什么吗?我该怎么做? @EmployedRussian
  • /path/to/my/binary 与您在symbol-file 命令中使用的路径相同。它是您的二进制文件的路径,是您运行的路径,也是因分段错误而崩溃的路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多