当前位置: 首页 > 面试题库 >

GDB不会加载源文件

洪子晋
2023-03-14
问题内容
  1. 我正在使用arm-linux-gcc来在主机(debian i386)上编译一个简单的C文件-g
  2. 然后将a.out文件复制到目标(arm,uclibc)计算机。
  3. 运行a.out-没关系。
  4. gdb a.out它说,使用GDB(目标)并列出源代码No such file or directory。事实一直如此吗?
  5. 如果我将1.c文件复制到目标,则list命令它列出源代码。

我的问题:

GDB一直都是这样,还是我可以控制其他选项?

您对调试程序有什么建议吗?

一些信息可能会有用:

源代码1.c文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// main function
int main(void)
{
    int i;
    for(i=0;i<3;i++){
        printf("i=%d\n",i);
    }
    return 0;
}

交叉编译版本(主机)

zodiac1111@debian:tmp$ arm-linux-gcc -v
Using built-in specs.
Target:arm-unknown-linux-uclibcgnueabi
Configured with:/home/ldsh/rt9x5/linux/buildroot/buildroot/output/toolchain/gcc-4.3.5/configure \
--prefix=/opt/rt9x5/arm-linux-uclibcgnueabi/usr --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu \
--target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++ \
--with-sysroot=/opt/rt9x5/arm-linux-uclibcgnueabi/usr/arm-unknown-linux-uclibcgnueabi/sysroot \
--with-build-time-tools=/opt/rt9x5/arm-linux-uclibcgnueabi/usr/arm-unknown-linux-uclibcgnueabi/bin \
--disable-__cxa_atexit --enable-target-optspace --disable-libgomp --with-gnu-ld --disable-libssp \
--disable-multilib --disable-tls --enable-shared --with-gmp=/opt/rt9x5/arm-linux-uclibcgnueabi/usr \
--with-mpfr=/opt/rt9x5/arm-linux-uclibcgnueabi/usr --enable-threads --disable-decimal-float \
--with-float=soft --with-abi=aapcs-linux --with-arch=armv5te --with-tune=arm926ej-s \
--with-pkgversion='Buildroot 2011.05-dirty' \
--with-bugurl=http://bugs.buildroot.net/ : (reconfigured) /home/ldsh/rt9x5/linux/buildroot/buildroot/output/toolchain/gcc-4.3.5/configure \
--prefix=/opt/rt9x5/arm-linux-uclibcgnueabi/usr --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu \
--target=arm-unknown-linux-uclibcgnueabi --enable-languages=c,c++ \
--with-sysroot=/opt/rt9x5/arm-linux-uclibcgnueabi/usr/arm-unknown-linux-uclibcgnueabi/sysroot \
--with-build-time-tools=/opt/rt9x5/arm-linux-uclibcgnueabi/usr/arm-unknown-linux-uclibcgnueabi/bin \
--disable-__cxa_atexit --enable-target-optspace --disable-libgomp --with-gnu-ld --disable-libssp \
--disable-multilib --disable-tls --enable-shared --with-gmp=/opt/rt9x5/arm-linux-uclibcgnueabi/usr \
--with-mpfr=/opt/rt9x5/arm-linux-uclibcgnueabi/usr --enable-threads --disable-decimal-float \
--with-float=soft --with-abi=aapcs-linux --with-arch=armv5te --with-tune=arm926ej-s \
--with-pkgversion='Buildroot 2011.05-dirty' --with-bugurl=http://bugs.buildroot.net/
Thread model:posix
gcc version 4.3.5 (Buildroot 2011.05-dirty)

编译命令:

arm-linux-gcc -g 1.c

主办:

zodiac1111@debian:tmp$ uname -a
Linux debian 3.12-1-686-pae #1 SMP Debian 3.12.9-1 (2014-02-01) i686 GNU/Linux

目标:

# uname -a
Linux AT91SAM9-RT9x5 2.6.39 #25 Mon Dec 30 17:40:40 CST 2013 armv5tejl GNU/Linux

复制到目标后,然后:

# ls -l
total 1
-rwxr--r--    1 ftp      83            6094 Feb 21 15:19 a.out

执行可以

# ./a.out 
i=0
i=1
i=2

目标gdb版本

# gdb -v


dlopen failed on 'libthread_db.so.1' - File not found
GDB will not be able to debug pthreads.

GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "arm-unknown-linux-uclibcgnueabi".

调试一个

# gdb a.out 
<...>
(gdb) list
1   1.c: No such file or directory.
    in 1.c
(gdb) break main 
Breakpoint 1 at 0x847c: file 1.c, line 8.
(gdb) run 
Starting program: /data/a.out

Breakpoint 1, main () at 1.c:8
8   in 1.c
(gdb) step
9   in 1.c
    (gdb) p i
$1 = 0
(gdb) step
i=0
8   in 1.c
(gdb) p i
$2 = 0
(gdb) step
9   in 1.c
(gdb) p i
$3 = 1
(gdb)

如果我将源代码文件1.c复制到同一目录中

# ls -l
-rw-r--r--    1 ftp      83             158 Feb 21 15:51 1.c
-rwxr--r--    1 ftp      83            6094 Feb 21 15:19 a.out

gdb现在可以列出源代码

# gdb a.out 
<...>
(gdb) list
warning: Source file is more recent than executable.
1   #include <stdio.h>
2   #include <string.h>
3   #include <stdlib.h>
4   // main function
5   int main(void)
6   {
7       int i;
8       for(i=0;i<3;i++){
9           printf("i=%d\n",i);
10      }
(gdb)

在主机平台上,如果我

  1. gcc -g 1.c在宿主平台上编译。
  2. 重命名删除1.c文件。
  3. 采用gdb a.out

发生相同的情况。

zodiac1111@debian:tmp$ gdb -v
GNU gdb (GDB) 7.6.2 (Debian 7.6.2-1)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
zodiac1111@debian:tmp$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.8/lto-wrapper
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.8.2-14' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --with-arch-32=i586 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.8.2 (Debian 4.8.2-14)

问题答案:

仔细
阅读GDB文档,尤其是有关源路径的文档。您要使用dir命令

另外,切换到较新的gdb(可能通过gdb从其源代码进行编译)。当前版本是7.7(所以6.8确实很旧)



 类似资料:
  • 问题内容: 我有以下示例代码 我用-g选项将这段代码编译为gcc。 生成单独的符号文件 去除a.out中的符号 在gdb中加载此a.out gdb说“找不到调试信息”很好。然后我在gdb中使用 add-symbol-file 命令 我想知道如何找到这个 地址 ? 是否有任何命令或技巧可以找到它? 这个 地址 代表什么? 我知道gdb还有另一个命令 符号文件, 但是它会覆盖以前加载的符号。因此,我必

  • 传统方式的导入外部JS和CSS文件的方法是直接在模板文件使用: <script type='text/javascript' src='/static/js/common.js'> <link rel="stylesheet" type="text/css" href="/static/css/style.css" /> 系统提供了专门的标签来简化上面的导入: {load href="/stati

  • 问题内容: 我已经尝试搜索,但仍然没有解决方案。当我导出到jar文件时,我的所有图像突然不再起作用。它们在Eclipse中运行良好,并且我已确保它们在jar文件中。我尝试使用get资源方法并制作一个图像加载器类来自动向上目录树,但它仍然失败。这是我所做的: 我将发送的路径如下所示:“ doc / icon.png” 我将所有图像放置在doc文件夹中,结构是最终项目,在内部有doc文件夹,然后是sr

  • 问题内容: 我有一个从腌制文件中导入数据的应用程序。它在Windows中可以正常工作,但Mac和Linux的行为很奇怪。 在OS X中,除非将文件类型设置为。,否则腌制的文件(文件扩展名“ .char”)不可用。然后,如果我选择一个扩展名为.char的文件,它将无法加载,并显示错误消息 ValueError:无法将字符串转换为浮点型 但是,如果我创建的文件没有.char扩展名,则该文件将正常加载。

  • 由于某种原因,Forge不会加载我的mcmod.info文件,即使它的格式正确并且在src/main/resources文件夹中。 mcmod.info: Constref:

  • 我有一个更大的Maven(3.0.4)项目,其中包含生成jaxb、javaws等代码的模块。 我遇到的问题是,导入项目后,生成的源路径没有添加为Eclipse中的源文件夹。目前,我需要手动添加文件夹(target/generated sources/jaxb)以使其在Eclipse中工作。 在旧版本的m2e中,存在一种配置,用于控制导入期间运行的阶段。 有人有必须改变的想法吗? 更新我已经测试添加