【问题标题】:gdb error: not in executable format: file not recognizedgdb 错误:不是可执行格式:文件无法识别
【发布时间】:2016-01-09 00:58:25
【问题描述】:

我正在尝试调试我的项目,该项目由 5 个文件组成。我使用 Makefiles 系统构建了该项目。我的 Makefile 如下所示:

CC=gcc

CFLAGS= -g -c

all: main.o io_ops.o rw_ops.o help_functions.o
    $(CC) -o db main.o io_ops.o rw_ops.o help_functions.o
io_ops.o:io_ops.c  db_ops.h
    $(CC) $(CFLAGS)  io_ops.c db_ops.h
rw_ops.o: rw_ops_c db_ops.h
    $(CC) $(CFLAGS) rw_ops.c db_ops.h 
help_functions.o: help_functions.c
    $(CC) $(CFLAGS) help_functions.c
clean:
    rm *.o db

我的可执行文件名为 db。所以我在终端上运行以下命令:

gdb db

然后我在 gdb 上输入以下命令:

list main.c

我收到 以下错误:未定义 main.c 我尝试输入以下命令:

list main.c

我收到以下错误: main.c:不是可执行格式:文件无法识别

为了确保我的 gdb 是 64 位程序,我输入了以下命令:

(gdb) show configuration
 This GDB was configured as follows:
configure --host=x86_64-linux-gnu --target=x86_64-linux-gnu
         --with-auto-load-dir=$debugdir:$datadir/auto-load
         --with-auto-load-safe-path=$debugdir:$datadir/auto-load
         --with-expat
         --with-gdb-datadir=/usr/share/gdb (relocatable)
         --with-jit-reader-dir=/usr/lib/gdb (relocatable)
         --without-libunwind-ia64
         --with-lzma
         --with-python=/usr (relocatable)
         --with-separate-debug-dir=/usr/lib/debug (relocatable)
         --with-system-gdbinit=/etc/gdb/gdbinit
         --with-zlib
         --without-babeltrace

这是关于我的可执行文件的一些信息:

db:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),适用于 GNU/Linux 2.6.24,BuildID[sha1]=25731950b7f76cf428eeca5fcc534555d677f3dc,未剥离

我不知道,有什么问题。有什么想法吗?

【问题讨论】:

  • 您的Makefile 大错特错;见this
  • 为什么我的 Makefile 错误?
  • 特别是,因为您编译显式头文件。你应该使用-Wall -g 作为你的编译标志。
  • -Wall:我为什么要使用它。它有什么作用?
  • @amitakCs -Wall 激活“所有”警告(嗯,不是全部,但其中有很多,最重要的是,几乎 100% 肯定会显示编程错误的警告)。你想要 -Wall 。总是。使用它。 -Wall 是你的朋友。 -Wall 将为您节省大量调试时间。

标签: c linux gdb


【解决方案1】:

你想做的是list main.c:1

list 不会按照您使用文件的方式列出文件。来自 gdb 帮助:

(gdb) 帮助列表

列出指定的函数或行。

不带参数,在前一个之后或前后列出十行 上市。

“list -”列出前十行列表之前的十行。

一个参数指定一行,围绕该行列出十行 线。两个参数之间用逗号指定开始和结束 要列出的行。可以通过以下方式指定行:

LINENUM,在当前文件中围绕该行列出,

FILE:LINENUM,列出该文件中的该行,

FUNCTION,列出该函数的开头,

FILE:FUNCTION,用于区分同名静态函数。

*ADDRESS,在包含该地址的行周围列出。

如果有两个参数,如果一个是空的,它代表十行距 其他参数。

【讨论】:

    【解决方案2】:

    不知道是什么问题。

    您可能想要list main

    说明:list 命令有four forms,没有一个以文件名作为参数。

    【讨论】:

    • 好吧,在我的 gdb 7.10 上,有 2 个:FILE:LINENUM, to list around that line in that fileFILE:FUNCTION, to distinguish among like-named static functions。该文档似乎不是最新的。
    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多