【发布时间】: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将为您节省大量调试时间。