在linux中还有一个更受你们欢迎的调试工具:GDB。GDB是一个由GNU开源组织发布的、UNIX/LINUX操做系统下的、基于命令行的、功能强大的程序调试工具。能够用来调试C,C++程序。linux
GDB功能强大,调试命令也有不少,可是对于普通程序调试中常常使用的命令并很少,以下表所示:ide
经常使用的指令:函数
例子程序以下所示:工具
#include <stdio.h> int getSum(int num1,int num2); int main(int argc, char *argv[]) { int num1 = 20; int num2 = 30; int sum = 0; num1 = num1 - 10; sum = getSum(num1,num2); printf("The sum is %d\n", sum); return 1; } int getSum(int num1,int num2) { printf("The numbers are %d and %d\n", num1,num2); return (num1 + num2); }
第一步:spa
对源程序进行编译,加上-g选项,使其能够进行调试。其结果是生成可执行文件test_gdb,而且能够对其进行gdb调试(对于该命令的详细解释,能够查看gcc命令)操作系统
第二步:.net
进入gdb调试:命令行
如上图最后一行所示,表明进入gdb调试,等待用户命令输入。3d
第三步:调试
加载进行调试的可执行文件,方便进行调试,以及源程序的显示。命令以下:
显示加载成功。
第四步:
(1)若是在设置断点以前,输入r
程序正常运行,打印输出结果,并正常退出。
(1)在运行以前,设置断点,为了肯定设置断点的位置(行号)可使用list(l)命令,显示出程序的内容,从而方便的设置断点
(2)设置断点
第一个断点设置在main函数的入口处,第二,三个断点为普通断点,第四个断点设置在函数调用的入口处,第5个断点为条件断点。
(3)开始调试运行
输入r开始运行,在第一个断点处(即main函数入口)中止运行。
此时打印输出num1的值,显示的并非20,而是一个随机值,由于此时尚未完成初始化操做,以下所示:
输入n执行下一步,此时再次打印输出num1,便可完成初始化。
输入c,执行到第二个断点处中止运行。以下图所示
当程序执行到getSum函数的调用处时,执行s,进入到getSum函数内部,继续调试执行
一直进行单步调试,直到函数结束运行,退出函数的调用
在getSum函数结束以前以及结束以后分别打印输出sum值:
很明显,函数getSum完成计算num1与num2的和以后并对sum赋值。
最后程序结束运行.
每日一句:善日者强,善时者霸 --荀子
参考文档:https://blog.csdn.net/longshen1990/article/details/47778269