今天学习了一下gcc与gdb的具体使用方法。并亲自用gdb调试了一下程序。gdb还是用不熟,只能以后慢慢加深体会了。(gdb刚开始用还真是不方便,也不知道如果做嵌入开发的话,有没有其它比较好的工具?如果有朋友知道,推荐一二,在此多谢啦!!)
1、GNU C编译器(即GCC)
gcc -v :GCC版本
-c:仅把源代友编译为目标代码;
-s:GCC在为C代码产生了汇编语言文件后,就停止编译。GCC产生的汇编语言文件的缺省扩展名为.s。
-E:指示编译器仅对输入文件进行预处理。此时,预处理器的输出被送到标准输出(如显示器)而不是储存在文件里。
-O:GCC对源码进行基本优化。
-O2:GCC产生尽可能小和尽可能快的代码
-g选项告诉GCC产生能被GNU调试器(如gdb)使用的调试信息,以便调试用户的程序。
-pg选项告诉GCC在用户的程序里加入额外的代码,执行时,产生gporf用的剖析信息以显示程序的耗时情况。
gcc info page:详细GCC编译器参数的说明,在Emacs内,按下C-hi,然后选“gcc”的选项。
2、使用gdb:
gdb filename:能直接指定想要调试的程序。也可用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。
(1)为使gdb正常工作,必须使程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型、在可执行文件里的地址映射以及源代码的行号。
(2)gdb命令一览:
file:装入想要调试的可执行文件
kill:终止正在调试的程序;
list:列出产生执行文件的源代码的一部分
next:执行一行源代码但不进入函数内部;
step:执行一行源代码而且进入函数内部;
run:执行当前被调试的程序;
quit:终止gdb
watch:能监视一个变量的值 而不管它何时被改变;
print:显示表达示的值;
break:在代码里设置断点,这将使程序执行到这里时被挂起;
make:不退出gdb就可以重新产生可执行文件
shell:不离开gdb就执行UNIX shell命令
(3)可在gdb中按Tab键让gdb补齐一个命令。