【Linux】Linux调试器——gdb使用

前言

学习完 gcc/g++ 后我们已经能够在 Linux 下进行C/C++编程了,但是既然涉及到了编程在怎么能没有调试呢?于是我们想更近一步的话就要学习gdb的使用了。由于Linux的服务器端没有图形化操作界面,用gdb进行调试你可能不太习惯,但这是必须经历的阶段。

gdb的使用

  • 一、关于调试的背景知识
  • 二、gdb的详细使用
    • 1.简单使用
    • 2.调试命令
  • 三、结语


一、关于调试的背景知识

  • 程序的发布方式有两种,debug模式和release模式
    debug模式下发布的程序都是可以调试的程序,
    release模式是正式发布版本是不可进行调试的,
    当然由于这样的差别,debug模式下的程序通常要比release版本下的程序大得多。
    在 Visual Studio 2022 看到的相关模式
    【Linux】Linux调试器——gdb使用_第1张图片

  • Linux gcc/g++出来的二进制程序,默认是release模式
    要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g 选项
    在这里插入图片描述
    简单的一个打印程序,可以看出两者的体积差别,在大型项目中这个差别会更加明显。
    【Linux】Linux调试器——gdb使用_第2张图片

二、gdb的详细使用

1.简单使用

1.调试某个程序

gdb 程序名

【Linux】Linux调试器——gdb使用_第3张图片

2.退出调试: ctrl + d 或 quit (q)
【Linux】Linux调试器——gdb使用_第4张图片

2.调试命令

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息
  • break(b) 函数名:在某个函数开头设置断点 。
    delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点
  • r或run:运行程序。
  • n 或 next:单条执行。(逐过程)
  • s或step:进入函数调用 (逐语句)
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值
  • breaktrace(或bt):查看各级函数调用及参数
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • set var:修改变量的值
  • info(i) locals:查看当前栈帧局部变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点

  • list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。

【Linux】Linux调试器——gdb使用_第5张图片
【Linux】Linux调试器——gdb使用_第6张图片

  • list/l 函数名:列出某个函数的源代码。

【Linux】Linux调试器——gdb使用_第7张图片

  • break(b) 行号:在某一行设置断点 break
  • info break :查看断点信息

在这里插入图片描述

  • break(b) 函数名:在某个函数开头设置断点 。

【Linux】Linux调试器——gdb使用_第8张图片

  • delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点

【Linux】Linux调试器——gdb使用_第9张图片
【Linux】Linux调试器——gdb使用_第10张图片

  • r或run:运行程序。

不设立断点,直接运行结束

【Linux】Linux调试器——gdb使用_第11张图片

  • n 或 next:单条执行。(逐过程)

【Linux】Linux调试器——gdb使用_第12张图片

【Linux】Linux调试器——gdb使用_第13张图片

  • s或step:进入函数调用 (逐语句)

【Linux】Linux调试器——gdb使用_第14张图片
【Linux】Linux调试器——gdb使用_第15张图片

  • finish:执行到当前函数返回,然后挺下来等待命令

【Linux】Linux调试器——gdb使用_第16张图片

  • print( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数,
  • p 变量:打印变量值。

重新运行程序

【Linux】Linux调试器——gdb使用_第17张图片

  • breaktrace(或bt):查看各级函数调用及参数

在这里插入图片描述

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪

【Linux】Linux调试器——gdb使用_第18张图片
【Linux】Linux调试器——gdb使用_第19张图片

  • until X行号:跳至X行

【Linux】Linux调试器——gdb使用_第20张图片
在这里插入图片描述

  • set var:修改变量的值

【Linux】Linux调试器——gdb使用_第21张图片

  • info(i) locals:查看当前栈帧局部变量的值

在这里插入图片描述

  • continue(或c):从当前位置开始连续而非单步执行程序 ,相当于运行到下一个断点。
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点

三、结语

gdb的使用需要多多操作练习才能掌握,掌握之后在程序的调试中用它会提高的我们的调试效率,当然gdb的功能与使用技巧还不止于此,感兴趣的同学可以继续深入学习。

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