【问题标题】:source file not found according to gdb info source根据 gdb info source 找不到源文件
【发布时间】:2018-04-19 11:22:36
【问题描述】:

我正在调试一个使用动态链接共享库运行的 C 应用程序。该程序在 Ubuntu 14.04 64 位上运行良好。但是,当 Linux 在退出应用程序时终止共享对象时,它会在 Ubuntu 16.04 上产生分段错误。

在 gdb 中,我在分段错误发生之前设置了一个断点。然后我用info source查看源文件信息:

Thread 1 "test" hit Breakpoint 3, _dl_fini () at dl-fini.c:201
(gdb) info source
Current source file is dl-fini.c
Compilation directory is /build/glibc-bfm8X4/glibc-2.23/elf
Located in /build/glibc-bfm8X4/glibc-2.23/elf/dl-fini.c
Source language is c.
Producer is GNU C11 5.4.0 20160609 -mno-mmx -mtune=generic -march=x86-64 -g -O2 -O3 -std=gnu11 -fgnu89-inline -fno-stack-protector -fmerge-all-constants -frounding-math -fPIC -ftls-model=initial-exec.
Compiled with DWARF 2 debugging format.
Does not include preprocessor macro info.

我找不到指定的编译目录和源文件的位置。

目录 /build/glibc-bfm8X4/glibc-2.23/elf 不存在。有人知道这种情况吗?

【问题讨论】:

    标签: linux ubuntu debugging gdb glibc


    【解决方案1】:

    这是编译glibc 的机器上的目录。它在我们的机器上不存在。

    安装相关软件包的-dbg 版本(使用sudo apt-get install) - 以安装调试符号。获取库的源代码(使用apt-get source) - 获取下载到当前目录的实际源文件。

    对于glibc,它是sudo apt-get install libc6-dbg 和apt-get source libc6

    有用的命令:

    • 列出所有包:dpkg -l(然后可以在列表中grep获取具体包名)
    • 列出包中的文件:dpkg -L <package name>
    • 搜索文件所属的包:dpkg -S <file path>

    使用~/.gdbinit 中的directory <path to source dir> 声明将gdb 指向包含源代码的正确目录。

    另外,试试valgrind 和rr 实用程序。

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 2016-03-27
      • 2020-07-06
      • 1970-01-01
      • 2013-12-04
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多