Linux下的强大工具gdb的使用(详细)

首先先说一下gdb是什么东西?

gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具。

一般来说,gdb主要帮忙你完成下面四个方面的功能:

启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
可让被调试的程序在你所设置指定的断点处停住。(断点可以是条件表达式)
当程序被停住时,可以检查此时你的程序中所发生的事。
动态的改变你程序的执行环境。
 

让我们在了解两个版本:Debug版本和Release版本,

Debug版本可以称为“可调试版本”,它包含了大量的调试信息,并且不进行任何优化,便于程序员调试。Debug模式下生成两个文件,除了生成.exe或.dll文件外,而且生成一个.pdb文件,该文件记录了代码中断点等调试信息。(调试信息是在编译阶段就要添加到文件中的)
Release版本可以成为“发行版本”,因为它是面对用户的,所以它不需要包含任何调试信息,且在编译期间对程序进行优化,使得程序在代码大小和运行速度上都是最优的。Release模式下生成一个.exe或.dll文件。

先来看一下gdb调试的命令:

接下来我们用一个例子进行对其调试:

 
  1. #include<stdio.h>

  2. #include<string.h>

  3. int add(int a,int b)

  4. {

  5. return a+b;

  6. }

  7. int sub(int a,int b)

  8. {

  9. return a-b;

  10. }

  11. int main()

  12. {

  13. int a=10;

  14. int b=20;

  15. printf("a+b=%d\n",add(a,b));

  16. printf("a-b=%d\n",sub(a,b));

  17. return 0;

  18. }

gdb调试需要的是Debug版本的可执行文件,而不需要Release版本的,

所以我们编译阶段要注意加上调试信息,使用编译器的-g参数可以做到这一点。

如在编译阶段时,加入调试信息(gcc -c main.c -g)

或者一步生成可执行文件时加上调试信息(gcc -o main main.c -g)

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

 

我们对其进行编译:

gcc -o  math math.o -g   // 编译文件,生成可执行程序,并且给文件加上调试信息

1. 启动调试

2. 显示main()附近的代码:l

如果找的是第5行附近的代码“list  5”:

3. 在某一行添加断点:b 行号

4. 在函数入口处添加断点:b 函数名

5. 查看断点信息info 断点 

6.开始运行程序run (r)

 

7. 逐步执行:s( step ) 遇到函数进入函数执行:

8.查看某个变量的变化:print 变量名(p 变量名)

9.看函数的堆栈:bt

10. 结束调试:finish

1. 退出调试:q

以上就是所说的gdb调试的过程与一些命令。望各位都可以熟练的使用!!!    

猜你喜欢

转载自blog.csdn.net/u014421422/article/details/108445039