gdb无法加载源文件? [英] gdb can not load source file?

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

问题描述


  1. 我只用 arm-linux-gcc 在主机(debian i386)上用编译一个简单的c文件 - 然后将 a.out 文件复制到目标计算机(arm,uclibc)中。

  2. 运行 a.out 即可。

  3. 使用gdb(terget) gdb a.out 并列出源代码,它表示没有这样的文件或目录
    事实一直如此?

  4. 如果我将 1.c 文件复制到目标中,那么 list 命令列出源代码。

我的问题:



gdb总是如此,或者我可以控制其他选项吗?



你有任何建议来调试程序吗?



我为我可怜的英语感到抱歉



有些信息可能有用:



源代码1.c文件

  #include  #include< string.h> 
#include< stdlib.h>
//主函数
int main(void)
{
int i; (i = 0; i <3; i ++){
printf(i =%d \ n,i)的

}
返回0;

交叉编译版本(主机)

  zodiac1111 @ debian:tmp $ arm-linux-gcc -v 
使用内置规格。
目标:arm-unknown-linux-uclibcgnueabi
配置为:/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/ :(重新配置)/ 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 = arm9 26ej-s \
--with-pkgversion ='Buildroot 2011.05-dirty'--with-bugurl = http://bugs.buildroot.net/
线程模型:posix
gcc版本4.3.5(Buildroot 2011.05-dirty)

编译命令:

  arm-linux-gcc -g 1.c 

主机:
$ b

  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

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

复制到目标后,然后:
$ b

 #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在'libthread_db.so.1'上失败 - 未找到文件
GDB将无法调试pthread。

GNU gdb 6.8
版权所有(C)2008 Free Software Foundation,Inc.
许可证GPLv3 +:GNU GPL版本3或更高版本< http://gnu.org/licenses /gpl.html>
这是免费软件:您可以自由更改和重新分配它。
在法律允许的范围内,不存在任何担保。有关详细信息,请键入显示复制
和显示保修。
这个GDB被配置为arm-unknown-linux-uclibcgnueabi。

debug a.out

 #gdb a.out 
< ...>
(gdb)列表
1 1.c:没有这样的文件或目录。
in 1.c
(gdb)break main
在0x847c处的断点1:file 1.c,line 8.
(gdb)run
启动程序:/ data / a.out

断点1,main()在1.c:8
8中1.c
(gdb)步骤
9合1。 c
(gdb)pi
$ 1 = 0
(gdb)step
i = 0
8 in 1.c
(gdb)pi
$ g $ b $ g $ b $ g $ b $ g $ b $ g
$ g $ b $ g $ b $ g $ b $ g $ b $ g $ b code>

如果我将源代码文件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)列表
警告:源文件比可执行文件更新。
1 #include< stdio.h>
2 #include< string.h>
3 #include< stdlib.h>
4 //主函数
5 int main(void)
6 {
7 int i; (i = 0; i <3; i ++){
9 printf(i =%d \ n,i)的
8。
10}
(gdb)

在主机平台上,在主机平台上使用 gcc -g 1.c 编译p>



  1. 重命名移除 1.c 文件
  2. li>
  3. 使用 gdb a.out

  zodiac1111 @ debian:tmp $ gdb -v 
GNU gdb(GDB)7.6.2 (Debian 7.6.2-1)
版权所有(C)2013自由软件基金会,Inc.
许可证GPLv3 +:GNU GPL版本3或更高版本< http://gnu.org/licenses/gpl。 HTML>
这是免费软件:您可以自由更改和重新分配它。
在法律允许的范围内,不存在任何担保。有关详细信息,请键入显示复制
和显示保修。
这个GDB被配置为i486-linux-gnu。
有关错误报告的说明,请参阅:
< http://www.gnu.org/software/gdb/bugs/> ;.
zodiac1111 @ debian:tmp $ gcc -v
使用内置规格。
COLLECT_GCC = gcc
COLLECT_LTO_WRAPPER = / usr / lib / gcc / i486-linux-gnu / 4.8 / lto-wrapper
目标:i486-linux-gnu
配置为:。 ./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
线程模型:posix
gcc版本4.8.2(Debian 4.8.2-14)


解决方案

仔细阅读 有关GDB的文档 源代码路径。你想使用 dir 命令

另外,切换到一个更新的gdb(编译 gdb 来源代码)。目前的版本是7.7(所以6.8真的很老)


  1. I just use arm-linux-gcc 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 is just ok.
  4. Use gdb(terget) 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 is list the source code.

My Question:

gdb has always been so, or there are other options I can control ?

Do you have any suggestions to debug program ?

I'm sorry for my poor English

Some information maybe useful:

source code 1.c file:

#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;
}

cross compile version(host)

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) 

compile command:

arm-linux-gcc -g 1.c

host:

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

target:

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

after copy to the target,then:

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

execute is ok

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

the target gdb version

# 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".

debug 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) 

if I copy the source code file 1.c into the same directory

# 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 could list the source code now.

# 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) 

At host Platform,if I

  1. compile with gcc -g 1.c at host platform.
  2. than rename or remove the 1.c file.
  3. Usegdb a.out

The same situation occurs.

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) 

解决方案

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

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天全站免登陆