文章目录
一、概述
二、使用场景
使用场景el-
- 程序编译无误,但是有逻辑错误
- 使用文字终端(shell),实现一个单步调试的功能
- 生成可执行文件之前必须加参数-g
gcc hello.c -o hello -g
三、gdb调试
- gdb + 可执行文件(如:gdb hello)启动gdb调试
- I(list)–>列出文件的代码清单
- l + 行号(132)–>代码从第32行开始显示
- b(break)–>设置断点
- b + 行号(b12)–>在第12行设置断点
- b + 行号(2)+ 条件(if i = 5)–> 在第2行设置断点,只有 i 等于5时生效
- info b(break)–>查看断点信息
- r(run)–>运行程序
- start -->单步执行,运行程序,停在第一行执行语句
- disable/enable + 断点号 -->设置断点是否有效
- d(delete)+ 断点号 -->删除指定断点号对应的断点
- p(print)+ 变量名 -->打印变量值
- display + 变量名 -->追踪变量
- 之后每执行一步,该变量值都会被打印出来
- undisplay + 变量名编号 -->取消跟踪
- n(next)–>下一行(不会进入到函数体内部)
- s(step)–>下一步(会进入到函数体内部)
- ptyte + 变量名 -->查看变量的类型
- finish -->结束当前函数,返回到函数调用点
- set -->设置变量的值 set var n=100
- q(quit)–>退出gdb
四、gdb详解
1. 简介
GDB(GNU Debugger)是GCC的调试工具。其功能强大,主要帮忙完成下面四个方面的功能:
1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2)可让被调试的程序在你所指定的调置的断点处停住(断点可以是条件表达式)。
3)当程序被停住时,可以检查此时你的程序中所发生的事。
4)动态地改变你程序的执行环境。
2. 生成调试信息
一般来说GDB主要调试的是C/C++的程序。
要调试C/C++的程序,首先在编译时必须要把调试信息加到可执行文件中。
//fun.c
#include <stdio.h>
#include "head.h"
int sum(int a, int b)
{
printf("welcome call %s, %d + %d = %d\n",__FUNCTION__, a, b, a + b);
return a + b;
}
int mul(int a, int b)
{
printf("welcome call %s, %d * %d = %d\n", __FUNCTION__, a, b, a * b);
return a * b