调试在我们编写程序时占有重要的地位。在linux下如何使用gdb调试器?下面采用FQA的方式让你快速了解gdb调试器。
1.如何启动gdb调试器呢?
在终端输入 gdb 程序文件名 即可。注意gdb调试的是可执行文件,而不是源代码。因此此处的文件名应该是可执行程序文件名。成功进入gdb后会显示一大段文字说明,然后是gdb提示符:(gdb) 。
请注意在进入gdb之前应该按照如下方式编译源程序:
gcc -g test_gdb.c -o test_gdb
只有加入选项-g才能被gdb调试。
2.除了上述方法,还有其他方法进入gdb吗?
直接在终端输入:gdb,成功进入后,使用file命令装入要调试的程序。输入: file 程序文件名 即可。
3.我成功进入了gdb,如何退出呢?
使用quit命令,输入: quit 即可。
4.进入gdb后,我要查看源代码必须退出才能查看吗?
当然不用。下面的命令可以帮助你快速查看源码。
list: 显示10源代码,再次输入该命令显示接下来的10行。
list 1,10:显示从第一行到第10行的代码。
list 函数名:显示此函数名周围的代码。
5.gdb可以设置断点吗?如何设置?
在gdb中最简单的设置方式是:break 行号 在这一行设置断点。比如break 9 会在代码的第9行设置断点。当程序执行到第9行会自动暂停,此时,第9行代码还未执行。
你也可以使用:break 函数名 的方式在某个函数处设置断点,程序运行到这个函数内的第一条语句处会自动暂停。
你也可以这样设置断点:break 行号或函数名 if 条件 。它很好理解,当满足if条件语句时才会在指定的行号或者函数名处断点。
6.我发现我把断点设置错了,如何消除断点?
使用命令:clear 行号 即可删除。
7.我已经成功设置了断点,可是我如何运行程序以便让它在断点处暂停?
输入:run 即可。程序自动停止在第一个断点处。
8.我的程序运行的时候需要加参数,我还能继续使用run命令运行程序吗?
当然可以,只不过你要在run后加上你的参数,参数间用空格隔开。如:run 参数1 参数2 …..
9.有时候我并不确定程序具体哪一句有问题,我如何一步一步的查看语句?
两种命令:next和step。两者均可以一句一句的查看语句。但不同的是,next命令将函数调用看作一条语句,而step则会进入函数,一步步的执行函数内的代码。
10.如何让暂停的代码继续运行?
输入命令:continue。它可以让程序继续运行,直到程序运行完毕或者遇到下一个断点为止。
11.当程序在断点处暂停执行时,如何查看当前变量的值?
使用print命令。具体如下:
print 命令或者表达式:显示变量或表达式的值。
print 变量=值:为变量赋值。
以上命令属于基本的调试命令,更多的命令可以参考man手册。
熟悉以上命令便可以快速入门gdb,要熟练的使用调试器,还需要多多使用。
参考资料:人民邮电出版社 《Linux C编程实战》 董永清