gpt4 book ai didi

linux - GDB 不会加载源文件

转载 作者:IT王子 更新时间:2023-10-29 00:14:11 25 4
gpt4 key购买 nike

  1. 我正在使用 arm-linux-gcc 通过 -g 在主机 (debian i386) 上编译一个简单的 C 文件。
  2. 然后将a.out文件复制到目标(arm,uclibc)电脑上。​​
  3. 运行 a.out – 一切正常。
  4. 使用 GDB (target) gdb a.out 并列出源代码,它显示 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)

最佳答案

仔细阅读 documentation of GDB特别是关于 source path .你想使用 dir 命令

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

关于linux - GDB 不会加载源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928876/

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