gpt4 book ai didi

linux - 尽管安装了调试信息,但 GDB 未显示行号信息

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:55 25 4
gpt4 key购买 nike

我正在尝试调试 gcov 代码。我写了一个简单的 C 程序调用 __gcov_flush() 方法,它是 gcc/gcov 的一部分。

在确认 libgcov.a 库没有使用调试符号构建后,我在我的机器上安装了 gcc 的调试信息包 (SLES 10)。

# gcc -v
Using built-in specs.
Target: x86_64-suse-linux
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.1.2 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib64 --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --program-suffix= --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=x86_64-suse-linux
Thread model: posix
gcc version 4.1.2 20070115 (SUSE Linux)


# rpm -qi gcc-debuginfo-4.1.2_20070115-0.29.6.x86_64
Name : gcc-debuginfo Relocations: (not relocatable)
Version : 4.1.2_20070115 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany
Release : 0.29.6 Build Date: Sat Sep 5 03:04:50 2009
Install Date: Thu Apr 24 05:25:32 2014 Build Host: bingen
Group : Development/Debug Source RPM: gcc-4.1.2_20070115-0.29.6.src.rpm
Size : 251823743 License: GPL v2 or later
Signature : DSA/SHA1, Sat Sep 5 03:06:59 2009, Key ID a84edae89c800aca
Packager : http://bugs.opensuse.org
URL : http://gcc.gnu.org/
Summary : Debug information for package gcc
Description :
This package provides debug information for package gcc.
Debug information is useful when developing applications that use this
package or when debugging this package.
Distribution: SUSE Linux Enterprise 10


/usr/lib/debug/usr/bin # ls -lrt gcov.debug
-rw-r--r-- 1 root root 94216 Sep 5 2009 gcov.debug

然而,即使在安装了正确版本的 debuginfo (gcov.debug) 包之后,GDB 仍然无法识别行号信息,它只是将控制传递到下一行而不报告行号(或步入函数)。

(gdb)s
26 i++;
(gdb)s
27 __gcov_flush();
(gdb)s
28 printf("%d",i);
(gdb)
(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".

为什么GDB无法识别gcov的行号信息?如果我没有为 gcc/gcov 安装正确版本的调试信息包,如何确认?

最佳答案

After confirming that libgcov.a library has not been built with debug symbols, I have installed debuginfo packages

您似乎不了解调试信息包的工作原理。他们无法神奇地将调试信息添加到没有调试符号(或被剥离的)的存档库中。

通常的构建流程是:

  • -g构建一切
  • 为所有完全链接二进制文件(可执行文件和共享库)准备单独的调试信息包
  • 剥离完全链接二进制文件(但不包括存档库)

这允许二进制文件和共享库很小,但在安装 debuginfo 包后仍然可以调试。

显然,在 SLES10 上,“但不是存档库”没有得到尊重,libgcov.a 也被删除了。由于单独的调试信息包不适用于存档库,因此您无法取回该信息。您唯一的选择是从源代码重建 GCC。

附言他们为什么要剥离 libgcov.a

这是一个权衡:最终用户链接的二进制文件会更小,但 libgcov.a 中的代码将不可调试。

由于大多数最终用户从不调试 libgcov.a,所以我认为这不是不合理的权衡。

关于linux - 尽管安装了调试信息,但 GDB 未显示行号信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com