【Linux】Linux调试器——gdb使用
创始人
2024-05-16 20:16:09

前言

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

gdb的使用

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


一、关于调试的背景知识

  • 程序的发布方式有两种,debug模式和release模式
    debug模式下发布的程序都是可以调试的程序,
    release模式是正式发布版本是不可进行调试的,
    当然由于这样的差别,debug模式下的程序通常要比release版本下的程序大得多。
    在 Visual Studio 2022 看到的相关模式
    在这里插入图片描述

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

二、gdb的详细使用

1.简单使用

1.调试某个程序

gdb 程序名

在这里插入图片描述

2.退出调试: ctrl + d 或 quit (q)
在这里插入图片描述

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行。

在这里插入图片描述
在这里插入图片描述

  • 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:启用断点

三、结语

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

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...