Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程:如何使用带有Makefile和命令行参数的gdb?_C_Makefile_Gdb_Command Line Arguments - Fatal编程技术网

C编程:如何使用带有Makefile和命令行参数的gdb?

C编程:如何使用带有Makefile和命令行参数的gdb?,c,makefile,gdb,command-line-arguments,C,Makefile,Gdb,Command Line Arguments,要创建.out可执行文件,我必须输入: $: make $: myprogram.out name.ged 我的程序包含一个命令行参数,即“name.ged” 每当我在获得分段错误(堆芯转储)后运行gdb时,我输入: $: gdb a.out core (gdb): bt 然后我使用backtrace命令,gdb返回: #0 0x4a145155 in ?? () #1 0x08a16ce0 in ?? () 我甚至尝试过使用up命令不向上移动堆栈,但仍然没有成功。我分不清程序中哪一行给了

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

$: make
$: myprogram.out name.ged
我的程序包含一个命令行参数,即“name.ged”

每当我在获得分段错误(堆芯转储)后运行gdb时,我输入:

$: gdb a.out core
(gdb): bt
然后我使用backtrace命令,gdb返回:

#0 0x4a145155 in ?? ()
#1 0x08a16ce0 in ?? ()
我甚至尝试过使用up命令不向上移动堆栈,但仍然没有成功。我分不清程序中哪一行给了我seg故障。gdb与我的其他程序一起工作,这些程序不涉及Makefile和命令参数,所以我想知道我的命令是否不正确

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

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

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

CFLAGS= -g -Wall -Wextra
您还可以将其直接添加到命令行(假设有一个合适的shell:)。这将在执行
make
命令(和子命令)期间将该值设置为环境变量

实际上,我建议您将其添加到bash.profile中,以便始终从编译器获得最多的信息

CFLAGS='-Wall -Wextra'
然后,在需要时,将其放入makefile中以生成可调试的可执行文件:

CFLAGS+= -g

您需要使用
-g
标志进行编译。由于您尚未发布Makefile,我无法给您任何进一步的帮助。那么命令是否为gcc-g myprogram.out name.ged?在make文件中,有一个用于编译代码的命令(gcc…),该命令需要-g标志来添加其他信息,以便gdb有效工作。此外,如果程序为
myprogram.out
,它应该是
gdb myprogram.out core
而不是
gdb a.out core
。它可能是坐在那里的任何旧的
a.out
CFLAGS+= -g