GDB赢得';无法加载源文件 我正在使用armlinuxgcc在主机(debian i386)上用-g编译一个简单的C文件 然后将a.out文件复制到目标(arm、uclibc)计算机 运行a.out——一切正常 使用GDB(target)GDB a.out并列出源代码,它表示没有这样的文件或目录。 事实一直如此 如果我将1.c文件复制到目标,那么list命令将列出源代码

GDB赢得';无法加载源文件 我正在使用armlinuxgcc在主机(debian i386)上用-g编译一个简单的C文件 然后将a.out文件复制到目标(arm、uclibc)计算机 运行a.out——一切正常 使用GDB(target)GDB a.out并列出源代码,它表示没有这样的文件或目录。 事实一直如此 如果我将1.c文件复制到目标,那么list命令将列出源代码,linux,gcc,gdb,Linux,Gcc,Gdb,我的问题: 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); } r

我的问题:

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;
}
编译命令:

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
主机:

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
目标:

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
复制到目标后,然后:

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现在可以列出源代码。

# 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) 
请仔细阅读有关的文章。您想使用
dir
命令


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

AFAIK您需要在目标机器(运行调试器的机器)上复制源代码

另一种调试方法是在目标机器上的gdbserver下运行代码,然后从PC连接到gdbserver。 因此,首先在目标机器上执行以下操作:

gdbserver localhost:9999 a.out
然后在您的电脑上执行以下操作:

gdb a.out
target remote your-target-ip-or-name:9999
...
对于我来说,使用您的开关编译,然后尝试在gdb中列出源代码,会按预期列出源代码。您不能移动源代码或二进制文件,否则gdb将无法找到它