gpt4 book ai didi

C编程: How to use gdb with Makefile and command line arguments?

转载 作者:太空狗 更新时间:2023-10-29 17:20:41 25 4
gpt4 key购买 nike

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

$: make
$: myprogram.out name.ged

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

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

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

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

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

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

最佳答案

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

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

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

CFLAGS= -g -Wall -Wextra

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

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

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

CFLAGS='-Wall -Wextra'

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

CFLAGS+= -g

关于C编程: How to use gdb with Makefile and command line arguments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com