根据gdb信息源找不到源文件

时间:2017-11-07 06:39:01

标签: linux ubuntu debugging gdb glibc

我正在调试使用动态链接的共享库运行的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不存在。有谁知道这种情况?

提前致谢。

1 个答案:

答案 0 :(得分:4)

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

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

glibc sudo apt-get install libc6-dbgapt-get source libc6

有用的命令:

  • 列出所有包:dpkg -l(然后可以在特定包名列表中grep
  • 列出程序包中的文件:dpkg -L <package name>
  • 搜索该文件所属的包:dpkg -S <file path>

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

另外,请尝试valgrindrr实用程序。