说起调试,学习的过程,原来真的是很心酸的。
那个时候在大学里边用VC写了个自动机模拟的软件,软件其实也不大,可能也就一两万行,在寝室闭门造车半个月搞出来的。
因为没写过什么程序,就拿着一本VC的书就开始了,当时不知道编译器原来支持那么多调试方法。根本就不晓得原来在断点处可以看到调用栈,可以跟踪变量的值,那会觉得调试找错本来就是自己干的事情,我就到处加log来找错。不过对于锻炼自己的Debug能力还是相当有帮助的。
好了言归正传,继续来讲GDB,它是用来调试程序的,调试我们经常用到的功能他都具备。
启动GDB很简单,gdb三个字母就够了
---gdb
然后加载我们需要调试的运行程序,对了平时我们的程序是不包含符号表的,所以如果需要调试需要在编译的时候加上-g选项。---gcc -g -o hello hello.c
---file hello
1.设置断点,包括代码行断点,变量断点,条件断点等
---break n 可以再第n行设置断点
---info break 可以查看当前所有断点
---delete n 可以用来删除断点
---watch i 可以用来设置变量断点,其中i是变量名
---在使用了file hello之后,使用run可以让程序运行起来
---run
2.断点后的状态查看
---info local 可以显示所有局部变量的值
---where/backtrace 可以显示调用栈
---display i 可以显示变量i的值
---whatis可以显示变量类型
---print i 可以打印出变量的值
3.继续调试
---continue 继续到下一个断点再停下来
---next 下一行调试
---step 下一行调试,遇到函数进入
常用调试命令可能也就这么多,大型程序,我觉得gdb还是不得行,至少我不知道他能不能远程调试。