c - 无法在 Ubuntu 14.04 上调试 libc 源

标签 c debugging ubuntu

我正在尝试调试 libc在 Ubuntu 14.04 上,但无法使用 gdb 执行此操作因为库和源没有正确匹配。

gdb无法正确放置断点。就像这样,我能够进入一个函数并查看源代码,但断点标记将位于函数内部的某个随机位置,而不是在开头。

当我使用 next 逐个语句进行处理时在 gdb , 标记会一直上下跳动(原因是源文件和调试库没有正确匹配。

我的 glibc版本根据 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我在做

dir <path-to-libc-source>/nptl (nptl 因为我正在进入 pthread_create )

我试过同时使用 eglibc-2.19来源以及eglibc_2.19.orig.tar.xz .

我也试过设置 LD_LIBRARY_PATH: export LD_LIBRARY_PATH=/usr/lib/debug

但以上也无济于事。

谁能成功调试libc代码分享他/她的技术如何正确地做到这一点?

最佳答案

假设源代码版本和库版本相同....

'跳转'的根本原因是编译器优化经常改变可执行代码的顺序而不是源文件中的顺序。

当使用任何优化参数编译代码时会发生这种情况。

关于c - 无法在 Ubuntu 14.04 上调试 libc 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784699/

相关文章:

c - 在 MSVC 2005 中执行 C 代码时出现奇怪的错误

c++ - 如何编写通用的独立于编译器的代码?

python - 在 Django 中,如何允许打印语句与 Apache WSGI 一起工作?

c# - 调试序列化期间消耗的 yield 返回的最佳方法?

r - 安装 R 包 Ubuntu 22.04.1 LTE 时的包 libcurl4-openssl-dev 问题

c - 32 位 ANSI C 中 int64_t 和 uint64_t 的 printf() 格式说明符

c++ - 在 IEEE float 实现中,当溢出导致 INF 时,它是否被视为未定义的行为?

iphone - 如果在越狱的iPhone OS 2.2.1(libgcc版本?)上调试,iPhone应用程序将崩溃。

android - emulator -avd 不启动设备

linux - 在 Ubuntu 服务器上远程访问 MongoDB 时出错