GDB 不会加载源文件 [英] GDB won't load source file

查看:15
本文介绍了GDB 不会加载源文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  1. 我正在使用 arm-linux-gcc 在主机 (debian i386) 上使用 -g 编译一个简单的 C 文件.
  2. 然后将a.out文件复制到目标(arm,uclibc)计算机上.
  3. 运行 a.out - 没问题.
  4. 使用 GDB (target) gdb a.out 并列出源代码,上面写着 No such file or directory.事实一直如此?
  5. 如果我将 1.c 文件复制到目标,那么 list 命令会列出源代码.
  1. I'm using arm-linux-gcc to compile a simple C file at host (debian i386) with -g.
  2. Then copy the a.out file to the target (arm,uclibc) computer.
  3. Run the a.out – it's just ok.
  4. Use GDB (target) gdb a.out and list the source code, it says No such file or directory. The fact has always been so?
  5. If I copy the 1.c file to the target, then list command it lists the source code.

我的问题:

一些信息可能有用:

源代码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
",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".

调试 a.out

# 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
",i);
10      }
(gdb) 

在主机平台,如果我

  1. 在主机平台上使用 gcc -g 1.c 编译.
  2. 重命名删除 1.c 文件.
  3. 使用gdb a.out
  1. compile with gcc -g 1.c at host platform.
  2. than rename or remove the 1.c file.
  3. Usegdb 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 命令

Read carefully the documentation of GDB notably about source path. You want to use the dir command

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

Also, switch to a newer gdb (perhaps by compiling gdb from its source code). Current version is 7.7 (so 6.8 is really old)

这篇关于GDB 不会加载源文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆