根据 gdb 信息源找不到源文件
source file not found according to gdb info source
我正在调试一个 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 不存在。有人知道这种情况吗?
这是机器上编译 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
实用程序。
我正在调试一个 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 不存在。有人知道这种情况吗?
这是机器上编译 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
实用程序。