【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 :修改变量的值
相关推荐
Linux-lucky2 小时前
21-Linux学习之旅之HTTPS和安全加固
linux·运维·学习·ubuntu·https
清水白石0083 小时前
Python 死锁排查全攻略:从线程卡死到锁依赖定位与工程化修复
linux·网络·python
ao-weilai4 小时前
Linux基础:Ext系列文件系统
linux·运维·服务器
qq_349447955 小时前
Linux系统,安装git,从使用git下载仓库(GitHub, Gitee, GitLab 等),并且使用ssh密钥,可以直接执行git pull
linux·git·ssh
mCell8 小时前
GitHub Actions 玩法大赏:一台远程主机的七种活法
linux·github·agent
盐焗鹌鹑蛋8 小时前
【Linux】动静态库的制作与使用
linux
艾伦_耶格宇9 小时前
【ELK】-4 logstash的搭建及操作
linux·运维·ubuntu·elk
mifengxing10 小时前
文件逻辑结构、物理结构与磁盘空闲存储空间管理
大数据·linux·运维·操作系统·计算机408
zhangrelay10 小时前
ROS 2 Lyrical 第9章 计算机视觉与摄像头应用
linux·笔记·学习·ubuntu·机器人·ros2