【问题标题】:gdb questions regarding symbolsgdb 关于符号的问题
【发布时间】:2012-05-28 11:38:13
【问题描述】:

我是 gdb 的新手。当我调试我的程序时,我只会得到如下所示的回溯。

Program received signal SIGSEGV, Segmentation fault.
0x000000003075a238 in ?? ()
(gdb) backtrace
#0  0x000000003075a238 in ?? ()
#1  0x00007fff72825da8 in ?? ()
#2  0x0000000000000008 in ?? ()
#3  0x000000003063c340 in ?? ()
#4  0x0000000000000000 in ?? ()
(gdb) 

我猜缺少一些符号信息。我收到这条消息

Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found).

所以我在 gdb 启动时尝试了 (gdb) 符号文件 /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.13.so 它没有帮助。

我如何知道缺少哪些符号信息?整个项目的代码是用gcc -g编译的。

【问题讨论】:

  • 您可能不需要标准 C 库中的符号,除非您正在调试 it - 任何SIGSEGV 问题出现在 你的代码。您确信您的代码在编译后不会被剥离吗? ...另一方面,#4 有一个空指针。也许整个堆栈都是垃圾。
  • gcc -g 应该可以工作。确保任何链接也保留符号。

标签: c++ gdb symbols


【解决方案1】:

当您静态编译应用程序(gcc 中的-static)时,可能会发生此问题。在这种情况下,构建机器的库可能与执行机器的库不同,gdb 找不到构建机器库的符号。

我遇到了这个问题,唯一对我有用的解决方案是在它正在执行的同一台机器上构建应用程序。

见:GDB cannot show the stack and shows "#1 0x0000000000000000 in ?? ()"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2011-10-11
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多