C编程:如何将gdb与Makefile和命令行参数一起使用?

时间:2013-03-07 00:01:45

标签: c makefile gdb command-line-arguments

要创建.out可执行文件,我必须输入:

$: make
$: myprogram.out name.ged

我的程序包含一个命令行参数,即“name.ged”。

每当我在遇到分段错误(核心转储)后运行gdb时,我输入:

$: gdb a.out core
(gdb): bt

然后我使用back trace命令,gdb返回:

#0 0x4a145155 in ?? ()
#1 0x08a16ce0 in ?? ()

我甚至尝试使用up命令向上移动堆栈,但仍然没有运气。我不知道我的程序中的哪一行给了我seg错误。 gdb与我的其他不涉及Makefile和命令参数的程序一起工作,所以我想知道我的命令是否不正确。

1 个答案:

答案 0 :(得分:8)

总结评论(在其他人做之前:)。

您的可执行文件缺少gdb显示相关源代码所需的符号信息。您需要将-g选项添加到compile命令并生成新的可执行文件。然后重新运行失败的测试以生成新的核心文件。 gdb 使用此可执行文件和核心将能够使用backtrace向您显示函数调用堆栈。

在makefile中,最简单的方法是添加(to)与隐式.o.c规则一起使用的CFLAGS变量。

CFLAGS= -g -Wall -Wextra

你也可以直接将它添加到命令行(假设一个不错的shell :)。这会在执行make命令(和子命令)期间将值设置为环境变量。

$ CFLAGS='-g -Wall -Wextra' make

我实际上建议你将它添加到你的bash .profile中,这样你总能从编译器中获得最多的信息。

CFLAGS='-Wall -Wextra'

然后,当您需要它时,将它放在makefile中以生成可调试的可执行文件:

CFLAGS+= -g
相关问题