【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 :修改变量的值
相关推荐
编程的一拳超人几秒前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
时凌云.7 分钟前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫31 分钟前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
广州灵眸科技有限公司1 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
susplus3 小时前
【linux应用软件编程】数据库sqlite3
linux·数据库·sqlite
GeW3 小时前
RHCE的评分潜规则:这样做实验,每题多拿20%分数
linux
运维全栈笔记3 小时前
Windows 安装 WSL2 并运行 Ubuntu 24.04 指南
linux·网络·windows·ubuntu
FlightYe3 小时前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
米糕闯编程4 小时前
鱼香ros2(一)在ubuntu中安装ros2
linux·运维·ubuntu·机器学习
Huangjin007_4 小时前
【Linux 系统篇(十八)】进程(六) :环境变量
linux·运维·服务器