【lesson8】gdb的介绍及使用

文章目录

  • gdb的介绍
    • 什么是gdb?
    • 背景认识
  • gdb的使用
    • gcc/g++ 程序文件名 -o 将来生成的可执行程序名 -g
    • gdb调试命令
      • gdb 可执行程序名
      • quit
      • list
        • l 0
      • Enter
      • r(run)
      • b(breakpoint) + n(行号)
      • info b
      • d(delete) + 断点编号
      • n(next)
      • p(printf) + 变量名
      • s(step)
      • bt
      • finish
      • display
      • undisplay + 编号
      • until + n(行号)
      • c(continue)
      • disable + 断点编号
      • enable
      • set var
  • gdb测试代码

gdb的介绍

什么是gdb?

gdb是linux下的一款调试工具,当代码出现问题时可以用linux调试。

背景认识

我们都知道,程序的发行版本有两种:Debug和Release。
Debug版本的可以被调试,release版本的不能调试。
Linux下gcc和g++默认形成的可执行程序是release版本的

gdb的使用

gcc/g++ 程序文件名 -o 将来生成的可执行程序名 -g

功能:生成可调试文件

gdb调试命令

gdb 可执行程序名

功能:进入调试模式
【lesson8】gdb的介绍及使用_第1张图片

quit

功能:退出gdb调试模式
【lesson8】gdb的介绍及使用_第2张图片

list

功能:显示代码
【lesson8】gdb的介绍及使用_第3张图片
list指令显示的代码是倒序的我们不易查看,下面还有别的指令。

l 0

功能:显示代码
【lesson8】gdb的介绍及使用_第4张图片

Enter

功能:gdb会记录最近一条命令,如果命令无变化,回车还是执行记录的那条命令。
【lesson8】gdb的介绍及使用_第5张图片
我们第一次使用l 0显示出红色框的少部分代码,为了代码全显示出来我按了两次Enter键才把代码完全显示出来。

r(run)

功能:开始调试,如果代码没有设置任何断点,程序就会直接运行结束
【lesson8】gdb的介绍及使用_第6张图片
我们可以看到没有任何停顿,直接输出结果。

b(breakpoint) + n(行号)

功能:在第n行设置断点
【lesson8】gdb的介绍及使用_第7张图片

info b

功能:查看断点信息
【lesson8】gdb的介绍及使用_第8张图片

d(delete) + 断点编号

功能:删除断点
【lesson8】gdb的介绍及使用_第9张图片
【lesson8】gdb的介绍及使用_第10张图片

n(next)

功能:逐过程调试代码,相当于vs中的F10
【lesson8】gdb的介绍及使用_第11张图片

【lesson8】gdb的介绍及使用_第12张图片

p(printf) + 变量名

功能:打印变量内容
【lesson8】gdb的介绍及使用_第13张图片

s(step)

功能:逐语句调试代码,相当于vs中的F11
【lesson8】gdb的介绍及使用_第14张图片
我们可以看到当遇到函数是,s可以直接进入函数内部。

bt

功能:查看当前调用堆栈
在这里插入图片描述

finish

功能:将当前函数跑完就停下来
【lesson8】gdb的介绍及使用_第15张图片
我们这里可以看到确实,finish跑完函数就停下来了。

display

功能:常显示
我们之前调试的时候,查看变量信息一直要我们手动的p,那么有没有一种方法可以我们不用每一步都自己手动的p呢?有,就是display
【lesson8】gdb的介绍及使用_第16张图片
我们可以看到display后,下面的每次n都会出现要display的数据。

undisplay + 编号

功能:取消常显示
上面我们学到了常显示,那么怎么取消呢?就用undisplay
【lesson8】gdb的介绍及使用_第17张图片
【lesson8】gdb的介绍及使用_第18张图片
我们可以看到,确实取消了常显示。

until + n(行号)

功能:直接跳转到第n行(如果已经进入函数了,不能直接从函数里面跳转到外面的任何一行,只能执行完本函数,并且停下来)
【lesson8】gdb的介绍及使用_第19张图片

c(continue)

功能:跳转到下一个断点
【lesson8】gdb的介绍及使用_第20张图片

disable + 断点编号

功能:关闭断点,但不删除
【lesson8】gdb的介绍及使用_第21张图片
【lesson8】gdb的介绍及使用_第22张图片
我们这里也可以看到,当run的时候,是停在19 行编号断点处,而之前的17行编号1的断点确实被关闭了。

enable

功能:打开断点
【lesson8】gdb的介绍及使用_第23张图片

【lesson8】gdb的介绍及使用_第24张图片
我们可以看到这次就停在了17行的的编号1断点处

set var

功能:更改变量值
【lesson8】gdb的介绍及使用_第25张图片
我们看到res的值确实被我们手动更改了。

gdb测试代码

  1 #include<stdio.h>
  2 
  3 int AddToTop(int top)
  4 {
  5   int res = 0;
  6   int i = 0;
  7   for(i = 0; i < top; i++)
  8   {
  9     res += i;
 10   }
 11   return res;
 12 
 13 
 14 }
 15 int main()
 16 {
 17   int top = 100;
 18   int res = 0;
 19   res = AddToTop(top);
 20   printf("%d\n",res);                                                                                                                               
 21   return 0;
 22 }
~

你可能感兴趣的:(linux,linux,服务器,运维)