我尝试在Ubuntu 14.04上调试libc
但是无法使用gdb
作为库并且源无法正确匹配。
gdb
无法正确放置断点。在中,我能够进入一个函数并查看源代码,但断点标记将位于函数内部的某个随机位置,而不是在开头。
当我在next
上使用gdb
继续声明语句时,标记将继续上下跳转(原因是源文件和调试库不能正确匹配。
根据glibc
的{{1}}版
ldd
我已使用以下命令下载ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
来源:
libc
以上将创建以下文件:
sudo apt-get source libc6
在eglibc-2.19
eglibc_2.19-0ubuntu6.6.debian.tar.xz
eglibc_2.19-0ubuntu6.6.dsc
eglibc_2.19.orig.tar.xz
我正在做
gdb
(nptl因为我正在进入dir <path-to-libc-source>/nptl
)
我已尝试同时使用pthread_create
来源和eglibc-2.19
。
我也尝试过设置LD_LIBRARY_PATH:eglibc_2.19.orig.tar.xz
但上述情况也没有帮助。
能够成功调试export LD_LIBRARY_PATH=/usr/lib/debug
代码的人是否可以分享他/她如何正确执行此操作的技巧?
答案 0 :(得分:0)
假设源代码版本和库版本相同....
“跳跃”的根本原因是编译器优化通常会改变源文件中顺序的可执行代码的顺序。
当使用任何优化参数编译代码时会发生这种情况。