C编程gdb错误信息

时间:2014-09-01 19:28:09

标签: c gdb

我是新手使用gdb所以我想首先使用一个打印“Hello”的简单程序

#include<stdio.h>
main(){
printf("Hello!\n");
}

另存为hello.c然后输入gdb。一旦打开,基于教程,我输入“file hello.c”以便将程序加载到调试器中,但是我收到了这样的消息:

This GDB was configured as "x86_64-linux-gnu".
"hello.c": not in executable format: File format not recognized

所以我输入了“gcc -Wall -g hello.c -o hello”并收到了这条消息:

hello.c:3:1: warning: return type defaults to âintâ [-Wreturn-type] hello.c: 
In function âmainâ: hello.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]

然后我用int main编辑了main,并在代码中添加了return 0。我再次做到了,没有错误所以我键入了gdb ./hello并且它有效...我应该总是把我的主电源作为int main并包含返回0吗?

1 个答案:

答案 0 :(得分:4)

安装打包的(适用于您的系统)gdb调试器和gcc编译器。在Debian和相关(例如Ubuntu)发行版上,以root身份运行(例如使用sudo):

 apt-get install gcc gdb build-essential

在Linux上,您需要(或想要)编译hello.c所有警告和调试信息,即使用

 gcc -Wall -g hello.c -o hello

此时您可能会收到来自gcc的错误或警告消息;尝试更正源文件hello.c并重新编译。

您应该决定使用C99标准,然后在-std=c99之后和gcc之前添加-Wall

检查

 ls -ls hello.c hello

您的hello可执行文件已生成(并且比源hello.c文件更年轻)。

然后启动调试器(通过提供可调试的可执行文件)

 gdb ./hello

然后,您会收到(gdb)提示。尝试使用

main中放置断点
 break main

GDB命令。然后,使用run运行您的程序,它应该到达main处的断点;在那时,键入help以获得有关GDB命令的一些帮助。

大多数GDB命令可以用前几个字母缩写。因此,您可以键入b而不是break

你绝对应该了解watch gdb命令,它在实践中非常有用


关于main您应该将其定义为int main (int argc, char**argv),并且应该以{{1​​}}(或其他一些小的正整数,对于运行时错误情况)结束它。实际上,您应该将return 0;添加为包含的标题(就像您对#include <stdlib.h>所做的那样)并使用<stdio.h>。另请阅读exit(3);通常阅读您正在使用的每个函数的文档(例如printf(3)),并接受您可能不了解所有文档。您可能希望安装return EXIT_SUCCESS;包并了解manpages-dev命令。