【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 :修改变量的值
相关推荐
LongRunning4 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
民乐团扒谱机7 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜7 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq
qq_371802118 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT8 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络
独隅8 小时前
WebStorm 在 Linux 环境下的实战安装与高效开发指南
linux·ide·webstorm
坤坤子吖10 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
阡陌数智10 小时前
Claude API新版本重大变更与安全升级指南
java·linux·安全
奶茶树10 小时前
【Linux】环境开发工具(vim,gcc,g++,Makefile)
linux·运维·vim
木子欢儿14 小时前
国内 macOS/Linux 安装 rust
linux·运维·服务器·macos·rust