我是新手使用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吗?
答案 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
命令。