【Linux入门】调试器gdb的基础使用

文章介绍了在Linux环境下如何使用gcc编译器以debug模式生成含调试信息的程序,以及利用gdb进行调试的基本指令,如设置断点、单步执行、查看函数调用堆栈等。此外,还提到了readelf工具用于分析可执行程序的elf格式和调试信息。
摘要由CSDN通过智能技术生成


在Linux下调试程序用的是gdb。

debug与release

  • 调试要使用debug模式
  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

如果我们对直接gcc出来的可执行程序使用gdb调试,则会显示:
在这里插入图片描述

编译生成debug版本的方法

只需要在gcc的时候加上-g即以debug模式编译可执行程序。

release版本没有很多调试信息,debug版本包含很多调试信息,所以release版本运行更快,供给客户使用。debug版本的大小也比release大,也是因为加入了很多调试信息。


readelf:读取可执行程序的二进制构成

Linux可执行程序遵守的规则是elf格式。
使用方法:

readelf -S mytest输入后显示:

在这里插入图片描述

再输入readelf -S mytest | grep -i debug可以查找debug调试信息:

在这里插入图片描述
以上操作对release版本就查不到调试信息。


调试指令

l/list

  • list/l [行号]:显示源代码,接着上次的位置往下列,每次列10行。
  • list/l [函数名]:列出某个函数的源代码。

注:第一次输入l指令后,后续可以直接连续按Enter来打印源代码,不用每次都输入l

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


断点设置相关指令

  • b/break [行号]:在某一行设置断点。
  • break [函数名]:在某个函数开头设置断点。
  • break 文件名:[行号]:指定文件的某一行设置断点。
  • break 文件名:[函数名]:指定文件的函数开头设置断点。
  • info b:查看断点信息。
  • d [n]:删除编号为n的断点。
  • delete breakpoints:删除所有断点
  • disable breakpoints [n]:禁用编号为n的断点(断点保留,但是不生效)
  • enable breakpoints [n]:启用编号为n的断点

断点使用:

1.在19行设置断点并查看。
在这里插入图片描述

2.图中Num为断点的编号,下图可以看到,在删除第一个断点以后,再添加一个断点,断点的编号并不是从1开始的,而是在本次调试中依次递增的。
在这里插入图片描述

3.Enb表示的是断点是否启用,n为禁用、y为启用。
禁用断点
在这里插入图片描述


r/run

  • run/r:从头连续执行程序,有断点执行到断点处,没有断点执行到结束。

s和n这种单步调试要先用r运行再调试。

n/next

  • n/nest:逐过程调试。不进入函数,直接将函数执行完,与vs下的F10调试类似,执行到函数结束的下一行停止。

s/step

  • s/step:逐语句调试。进入函数,一句一句调试,与vs下的F11调试类似。

✳ until

  • until [行号]:直接执行到指定行号停止。
    将当前位置和until指定的行号之间的代码执行完。

✳ finish

  • finish:在一个函数内直接运行到函数结束。
    进入一个函数,执行完该函数就停下来。

✳ c/continue

  • c/continue:从一个断点处运行到下一个断点处停下来。

display监视

  • display [变量名]:跟踪查看一个变量,调试的时候常显示它的值,一直显示在命令行中。与vs下的监视类似。
  • undispaly [编号]:监视变量会有一个编号,删除这个监视,之后不再显示。
  • p [变量名]:查看一个变量,只看一次,之后调试不会显示,查一次看一次。

监视变量的编号:
在这里插入图片描述

set ver

  • set ver:在编译时直接修改变量的值。
    比如在循环中将循环改到某个值。

bt/breaktrace

  • bt/breaktrace:查看各级函数调用及参数。

退出调试

  • ctrl+d或quit:退出调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值