【Linux】基础开发工具gdb

Linux基础开发工具gdb

1、Debug和release

程序的发布方式有两种,Debug和release模式,Debug模式是开发者模式,用户最终用的是release,在Debug模式下,因为增加了调试信息,所以可执行文件体积较大,gcc/g++ 默认编译出来的程序是Release 版本,如果想在Debug模式下得到可执行程序,那么需要输入:

cpp 复制代码
gcc mycmd.c -o mycmd -g 

通过readelf mycmd-debug -S | grep debug 指令,可以将二进制文件中与Debug有关的部分过滤出来,打印出mycmd-debug在Debug模式下的信息

2、gdb常用指令

mycmd.c:

cpp 复制代码
#include <stdio.h>

int Sum(int s, int e)
{
	int result = 0;
	int i = s;
	for(s; i <= e; i++)
	{
		result += i;
	}
	return result;
}
int main()
{
	int start = 1;
  int end = 100;
  printf("I will begin\n");
  int n = Sum(start, end);
  printf("running done, result is: [%d~%d]=%d\n", start, end, n);
  return 0;
}

输入gdb,进入gdb环境

输入q退出

  • 输入list或l:显示源代码
  • 输入l num 或list num :查看文件第num行附近代码
  • 输入run或r :运行程序

打断点时,使用gdb不方便查看断点,以下使用cgdb进行调试

  • 输入b 行号 :设置断点
  • 输入info b 行号 :查看所有断点信息
  • 输入d num :删除断点
  • n或next :逐过程单步执行面部进入函数内部
  • s或step :逐语句单步执行,进入函数内部

断点为第18行:

  • 输入p 变量 :打印变量或表达式的值

p为单次打印,单步执行,不会自动刷新,打印变量的值不会变化

  • display 变量名 :跟踪监视,程序每次暂停,自动打印变量
  • undisplay num :取消对先前变量的跟踪
  • 输入until x :跳转至x行
  • 输入finish :执行到当前函数结束,暂停在函数调用处,打印返回值

$1 是 gdb 保存返回值的变量,5050 就是 Sum 函数 return 带回的结果

  • 输入continue或c :从当前断点直接运行到下一个断点
  • disable breakpoints :禁用断点
  • enable breakpoints :启用被禁用的断点
  • backtrace或bt :查看函数调用栈
  • info locals :查看当前函数局部变量
  • set var :修改变量的值
相关推荐
顺顺 尼12 小时前
linux 进程信号(上)
linux·c++·算法
niuTaylor12 小时前
飞腾 FT-2000/4 Ubuntu 内存卡 / NVMe SSD 系统制作完整指南
linux·服务器·人工智能·驱动开发·单片机
傲世仙尊13 小时前
信号量环形队列与线程池起步-把临界资源拆成很多份
linux
Huangjin007_14 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
ShineWinsu14 小时前
对于ProtoBuffer:ProtoBuffer的介绍以及安装
linux·网络·google·协议·序列化·反序列化·protobuffer
FlightYe15 小时前
视界原理之2D视频(二):视频文件里有什么
android·linux·网络·c++·ffmpeg·音视频·aac
GeW16 小时前
从代码到共识:技术突围如何映照大国相处之道
linux
承渊政道17 小时前
Linux系统学习【进程信号详细解析——认识、产生、保存以及捕捉信号】
linux·学习·ubuntu·ssh·vs code·进程信号
硅基手札17 小时前
【linux内核专栏01】Linux 内核心智模型与设计哲学
linux·运维·驱动开发·开源软件
码完就睡18 小时前
Linux——socket网络编程
linux·运维·网络