如何使用 libc 的调试版本

2024-10-17 08:47:00
admin
原创
69
摘要:问题描述:问题的简短版本:如何让 gdb 使用调试符号libc?详细版本:我正在用 gdb 调试一个程序,我想查看有关 使用的 futex 的信息libc。然而,在调试过程中的某个时候,我得到了如下输出:Catchpoint 2 (call to syscall futex), 0x00007ffff772b...

问题描述:

问题的简短版本:
如何让 gdb 使用调试符号libc

详细版本:
我正在用 gdb 调试一个程序,我想查看有关 使用的 futex 的信息libc。然而,在调试过程中的某个时候,我得到了如下输出:

Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ?? () from /lib/libc.so.6
(gdb) bt
#0  0x00007ffff772b73e in ?? () from /lib/libc.so.6
#1  0x00007ffff767fb90 in ?? () from /lib/libc.so.6
#2  0x00007ffff767a4c0 in vfprintf () from /lib/libc.so.6
#3  0x00007ffff768565a in printf () from /lib/libc.so.6
....

当我info sharedlibrary在断点处运行 gdb 时,我看到:

(gdb) info sharedlibrary
From                To                  Syms Read   Shared Object Library
0x00007ffff7dddaf0  0x00007ffff7df6704  Yes (*)     /lib64/ld-linux-x86-64.so.2
0x00007ffff7bc53e0  0x00007ffff7bd1388  Yes (*)     /lib/libpthread.so.0
0x00007ffff79ba190  0x00007ffff79bd7d8  Yes (*)     /lib/librt.so.1
0x00007ffff76538c0  0x00007ffff7766c60  Yes (*)     /lib/libc.so.6
0x00007ffff6c1fd80  0x00007ffff6c303c8  Yes (*)     /lib/libgcc_s.so.1
(*): Shared library is missing debugging information.

当我跑步时,ldd我看到:

linux-vdso.so.1 =>  (0x00007ffff7fde000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007ffff7dbf000)
librt.so.1 => /lib/librt.so.1 (0x00007ffff7bb6000)
libc.so.6 => /lib/libc.so.6 (0x00007ffff7833000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffff7fdf000)

我正在使用 Ubuntu 10.04,我认为带有调试符号的版本libc/usr/lib/debug/lib。我尝试设置LD_LIBRARY_PATH变量以将其放在路径的前面,但似乎没有什么区别。

我不太清楚程序如何选择要加载的共享库,无论是在运行时还是在编译时设置(我假设是在运行时,但现在我不确定)。因此,如果您能提供有关如何让 gdb 使用调试版本的信息,libc我将不胜感激。


解决方案 1:

我认为带有调试符号的 libc 版本位于 /usr/lib/debug/lib 中。我尝试设置 LD_LIBRARY_PATH 变量以将其置于路径的前面,但这似乎没有什么区别。

这些不是您要找的机器人。

中的库/usr/lib/debug不是真正的库。相反,它们包含调试信息,但不包含真正的 的.text任何部分。您可以在此处阅读有关单独的调试信息文件的信息。.data`libc.so.6`

中的文件/usr/lib/debug来自软件包,只要它们与你安装的版本匹配, libc6-dbgGDB 就会自动加载它们。如果你的和不匹配,你应该会收到来自 GDB 的警告。libc6`libc6`libc6-dbg

你可以通过设置 来观察 GDB 尝试读取的文件。当和匹配set verbose on时,你应该看到以下内容:libc6`libc6-dbg`

(gdb) set verbose on
(gdb) run
thread_db_load_search returning 0
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/lib/ld-2.11.1.so...done.
thread_db_load_search returning 0
done.
thread_db_load_search returning 0
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from system-supplied DSO at 0x7ffff7ffb000...done.
WARNING: no debugging symbols found in system-supplied DSO at 0x7ffff7ffb000.
thread_db_load_search returning 0
Reading in symbols for dl-debug.c...done.
Reading in symbols for rtld.c...done.
Reading symbols from /lib/librt.so.1...Reading symbols from /usr/lib/debug/lib/librt-2.11.1.so...done.
thread_db_load_search returning 0
... etc ...

更新:

例如我看到

Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done

这意味着你的 GDB 没有搜索/usr/lib/debug。发生这种情况的原因之一是你设置debug-file-directory.gdbinit正确。

以下是默认设置:

(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".

解决方案 2:

确保已经安装了 libc 的调试符号:

sudo apt-get install libc6-dbg

如果你在 x64 系统上调试 x86 代码:

sudo apt-get install libc6:i386
sudo apt-get install libc6-dbg:i386
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用