配置好linux,我想做的就是试试gcc,但作为小白,还得网上找教程,看的没有很简单的介绍,正好自己慢慢摸索写一篇。
首先c语言我已经不陌生了,很快用文本编辑器写一个简单的sum程序,关键学学用命令行的形式来调试。
在终端中输入gcc sum.c,会产生默认的a.out可执行文件,然后输入./a.out就在终端中输出结果了。
但不能总直接用这个,写下一个程序就会覆盖掉第一个a.out,所以用gcc -o sum sum.c,产生sum文件
还有些-c,-s 的命令目前没有涉及,用的时候再看
然后是调试,我原来在win中就习惯用f10单步运行,linux中也有强大的调试功能
输入gcc -g sum.c -o test 加-g选项产生debug信息
然后gdb test,执行此命令后会出现gdb的版本号等信息
在(gdb)后输入如下命令(可以用首字母)
list:列表显示源代码。
(gdb) list //一次显示十行程序
(gdb) list <line-number> //显示参数行之前和之后的10行内容,比如list 10,会将5-14之间的内容打印出来
(gdb) list <line1,line2> //显示参数之间的内容
next:执行一行源代码但不进入函数内部。
step:执行一行源代码而且进入函数内部。
run:执行当前被调试的程序
run <arg1 arg2...>
quit:终止gdb
watch:监视一个变量的值
break:在代码里设置断点,程序执行到这里时挂起
1.设置断点
(gdb)break <line-number> //某行设置
(gdb)break <function-name> //某个函数前设置断点
2.有时需要查看运行中变量等于某个值时,程序的状态,比如for循环执行到第几次时相关变量的值。这时可以使用断点。
(gdb)break <line-number> if <conditional expression> //表达式符合C语法
(gdb)break 10 if i==3
注:条件表达式中的变量必须是在设置断点的行的变量作用域内。
3.如果断点已经设置好,可以使用condition 命令为指定断点添加条件
(gdb)condition break-number if <expression>
4.可以在指定的源文件中设置断点
(gdb)break <filename:line-number>
(gdb)break <filename:function-name>
如:(gdb)break main.c:10
(gdb)break main.c:main
5.删除断点
(gdb)info break //打印所有断点信息
(gdb)delete breakpoint <point-number>
6.观察点(数据断点)
(gdb)watch <condition>
断点与观察点的区别:1.所有使用与breakpoint的操作都适用于watchpoint
2.断点是CPU到某一地址取指令时中断,观察点是CPU到某一地址读写数据时中断。
make:不退出gdb而重新产生可执行文件
shell:不离开gdb而执行shell
kill:终止正在调试的程序。