Bon*_*nie 6 c gdb makefile command-line-arguments
要创建.out可执行文件,我必须输入:
$: make
$: myprogram.out name.ged
Run Code Online (Sandbox Code Playgroud)
我的程序包含一个命令行参数,因此是"name.ged".
每当我在获得分段错误(核心转储)后运行gdb,我输入:
$: gdb a.out core
(gdb): bt
Run Code Online (Sandbox Code Playgroud)
然后我使用back trace命令,gdb返回:
#0 0x4a145155 in ?? ()
#1 0x08a16ce0 in ?? ()
Run Code Online (Sandbox Code Playgroud)
我甚至尝试使用up命令向上移动堆栈,但仍然没有运气.我不知道我的程序中的哪一行给了我seg错误.gdb与我的其他不涉及Makefile和命令参数的程序一起工作,所以我想知道我的命令是否不正确.
lus*_*oog 10
总结评论(在别人做之前:).
您的可执行文件缺少gdb需要显示相关源代码的符号信息.您需要将该-g选项添加到compile命令并生成新的可执行文件.然后重新运行失败的测试以生成新的核心文件.带有这个可执行文件和核心的gdb将能够显示使用的函数调用堆栈backtrace.
在makefile中,最简单的方法是添加(to)CFLAGS与隐式.oc规则一起使用的变量.
CFLAGS= -g -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)
您也可以将它直接添加到命令行(假设一个体面的shell :).这会在执行make命令(和子命令)期间将值设置为环境变量.
$ CFLAGS='-g -Wall -Wextra' make
Run Code Online (Sandbox Code Playgroud)
我实际上建议你将它添加到你的bash .profile中,这样你总能从编译器中获得最多的信息.
CFLAGS='-Wall -Wextra'
Run Code Online (Sandbox Code Playgroud)
然后,当您需要它时,将它放在makefile中以生成可调试的可执行文件:
CFLAGS+= -g
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21996 次 |
| 最近记录: |