
我们在上一篇提到了GNU编译器 – GCC。
GCC用于编译程序,而Linux的另一个GNU工具gdb则用于调试程序。
GDB调试器
GNU侦错器(GNU Debugger,缩写:GDB),是GNU软件系统中的标准侦错器,此外GDB也是个具有移携性的侦错器,经过移携需求的调修与重新编译,如今许多的类UNIX操作系统上都可以使用GDB,而现有GDB所能支持除错的编程语言有C、C++、Pascal以及FORTRAN。
GDB具备各种侦错功效,能针对计算机程序的运行进行追踪与警告,使用GDB的除错人员可以监督及修改程序的内部变量值,甚至监督与修改独立于主程序运作外,以独立个体型态调用(调用使用)的函数。
和所有常用的调试工具一样,gdb提供了以下功能:
1.监视程序中变量的值
2.在程序中设置断点
3.程序的单步执行
和GCC一样,GDB也是用命令来完成的。
最常用的命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
file //装入想要调试的可执行文件。 kill //终止正在调试的程序。 list //列表显示源代码。 next //执行一行源代码但不进入函数内部。 step //执行一行源代码而且进入函数内部。 run //执行当前被调试的程序 quit //终止gdb watch //监视一个变量的值 break //在代码里设置断点,程序执行到这里时挂起 make //不退出gdb而重新产生可执行文件 shell //不离开gdb而执行shell |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//演示怎样用GDB来调试一个求0+1+2+3+…+99的程序 /* Filename:sum.c */ main() { int i, sum; sum = 0; for (i = 0; i < 100; i++) { sum + = i; } printf("the sum of 1+2+...+ is %d", sum); } //执行如下命令编译sum.c(加-g选项产生debug信息): gcc –g –o sum sum.c //在命令行上键入 gdb sum //并按回车键就可以开始调试sum了,再运行run命令执行sum。 |
部分命令详解
list命令:
list命令用于列出源代码。
根据列出的源程序,如果我们将断点设置在第5行,只需在gdb命令行提示符下键入如下命令设置断点:(gdb) break 5。
这个时候我们再run,程序会停止在第5行。
设置断点的另一种语法是 break
相反的,clear用于清除所有的已定义的断点,clear
watch命令:
watch命令用于观查变量或表达式的值,我们观察sum变量只需要运行watch sum。
watch
要观查当前设置的watch,可以使用info watchpoints命令。
next、step命令:
next、step用于单步执行,在执行的过程中,被watch变量的变化情况将实时呈现(分别显示Old value和New value)。
next、step命令的区别在于step遇到函数调用,会跳转到到该函数定义的开始行去执行,而next则不进入到函数内部,它把函数调用语句当作一条普通语句执行。
参考资料
Linux下的C编程实战 – ITEYE
本文链接地址: Linux Programming, Language C 2 – GDB
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。