我正在尝试在Ubuntu14.04上调试libc,但是无法使用gdb来调试,因为库和源代码不匹配。
gdb无法正确放置断点。就像在中一样,我可以单步执行一个函数并查看源代码,但断点标记将位于函数内部的某个随机位置,而不是在开始处。
当我在gdb上使用next逐句执行语句时,标记会一直上下跳跃(原因是源文件和调试库不正确匹配。
根据ldd,我的glibc版本是
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中,我正在做
dir <path-to-libc-source>/nptl (nptl,因为我正在步入pthread_create)
我既尝试使用eglibc_2.19.orig.tar.xz,也尝试使用eglibc-2.19源代码。
我还尝试设置了LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/usr/lib/debug
但以上也无济于事。
能够成功调试libc代码的人可以分享他/她的技术如何正确地进行调试吗?
发布于 2015-11-19 01:38:58
假设源代码版本和库版本相同...
“跳转”的根本原因是编译器优化经常改变可执行代码的顺序,而不是源文件中的顺序。
当使用任何优化参数编译代码时,就会发生这种情况。
https://stackoverflow.com/questions/33784699
复制相似问题