【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退出

  • 输入listl:显示源代码
  • 输入l numlist num :查看文件第num行附近代码
  • 输入runr :运行程序

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

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

断点为第18行:

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

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

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

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

  • 输入continuec :从当前断点直接运行到下一个断点
  • disable breakpoints :禁用断点
  • enable breakpoints :启用被禁用的断点
  • backtracebt :查看函数调用栈
  • info locals :查看当前函数局部变量
  • set var :修改变量的值
相关推荐
风曦Kisaki2 小时前
Kubernetes(K8s)笔记Day03: Pod命名空间,标签,Pod 的调度,污点与容忍度,Pod 常见状态和重启策略,Pod 生命周期
linux·运维·笔记·docker·云原生·容器·kubernetes
xuhe22 小时前
一劳永逸!解决 AutoDL 系统盘(30GB)爆满与 pip 缓存迁移
linux·python·ai·jupyter
学无止境_永不停歇3 小时前
9. 缓冲区
linux·服务器·c++
dok123 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(4) devicefile 设备号相关
linux·运维·服务器
Fu2067213 小时前
结课项目考试
linux·运维·服务器
Albert·Lin4 小时前
LVS相关知识点总结-一
linux·服务器·lvs
tianyuanwo5 小时前
深入理解 Linux 启动救援模式与控制台选择:从 x86 的 tty0 到 ARM 的 ttyS0
linux·grub·救援系统
瞬间&永恒~6 小时前
【MySQL】练习5-1:配置慢查询日志
linux·运维·云原生
邪修king6 小时前
Re:Linux系统篇(四):权限Chapter--用户身份、权限位与目录权限三大核心问题
linux·运维·服务器