当前位置: 首页 > article >正文

Linux---gdb

Linux调试器-gdb使用

GDB(GNU调试器)是一个在多种操作系统(包括Linux)上使用的功能强大的调试器。它允许开发者对程序进行调试,以便找出程序中的错误、理解程序的执行过程和进行性能分析。

程序的发布有两种,debug和release,而Linux gcc/g++出来的二进制程序,默认是release模式,release是无法使用gdb的,只有debug模式下才可以,使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项。

在这里插入图片描述


1	#include <iostream>
2	
3	using namespace std;
4	
5	int Sum(int i)
6	{
7	    int sum = 0;
8	    for (int j = 0; j <= i; j++)
9	    {
10	        sum += j;
(gdb) 
11	    }
12	    return sum;
13	}
14	
15	int main()
16	{
17	    int i = 0;
18	    i = 3;
19	    int ret = Sum(i);
20	
(gdb) 
21	    cout << ret << endl;
22	
23	    return 0;
24	}
  • 如何进入gdb调试模式?
gdb 可执行程序(不是源代码)

在这里插入图片描述

  • 如何退出gdb模式?
输入q或者ctrl+d退出
  • 进入gdb之后不会自动的显示代码,需要手动输入指令
list / l 行号:显示yuan'dai'ma

gdb会自动的记录上次使用的命令,按下回车可继续执行

  • r / run:运行程序

在这里插入图片描述

  • 在调试的时候,要设置断点进行调试:break(b)+行号 在某一行设置断点

在这里插入图片描述

  • 删除断点:delete breakpoints(删除所有断点)
    在这里插入图片描述

  • 删除某一个断点:delete breakpoint n

在这里插入图片描述

  • break 函数名:在某个函数开头设置断点
    在这里插入图片描述

  • 在打完断点之后可以按r开始执行程序,在输入n/next 就可以单条执行

在这里插入图片描述

  • 在调试的过程中碰到函数,输入n会直接把函数当成一条语句执行,不会进入函数,这个时候就需要输入s/step:进入函数调用

在这里插入图片描述

  • info break 查看断点信息

在这里插入图片描述

  • 当函数体里面的循环过多时,可以考虑使用finish:执行到当前函数返回,然后停下来,等待命令

在这里插入图片描述

  • print 变量:打印值

在这里插入图片描述

  • continue / c 从当前位置开始连续而非单步执行程序,也就是根据断点执行

在这里插入图片描述

  • disbale breakpoings 禁用断点
  • enable breakpoints 启用断点
  • info breakpoints:查看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量
  • undisplay:取消对先前设置的那些变量的跟踪
  • breaktrace/bt 查看各级函数调用及参数
  • info (i)locals 查看当前栈帧局部变量的值
  • quit:退出gdb

http://www.kler.cn/a/37853.html

相关文章:

  • 35、解释一下spring支持的几种bean的作用域
  • Win git切换Github账号
  • Redis PipelineScript
  • Kafka 为什么那么快?
  • 驱动程序设计 利用RTC显示年月日时分秒到终端 7.11
  • 自动驾驶MCU 软件架构说明
  • 面试之MySQL中的锁
  • 二次元少女-InsCode Stable Diffusion 美图活动一期
  • 服务器数据库中了360后缀勒索病毒怎么办,怎么解决与防范?
  • ARP协议(地址分析协议)
  • 【ECMAScript6_5】Reflect、Promise 对象、Iterator 和 for...of 循环、、Generator 函数
  • Java-通过IP获取真实地址
  • 一款基于JAVA开发的Echarts后台生成框架
  • js 算法面试题40道题,前端经典面试题20道-附详细答案
  • 从零开始 Spring Cloud 2:Eureka 注册中心
  • 利用集合框架实现-超市会员管理系统
  • STM32 Proteus仿真医用仓库环境控制系统紫外线消毒RS232上传CO2 -0066
  • ES6: Map数据结构
  • 实现高效数据处理的利器:Java Stream API 的妙用与性能优化
  • 基于 Jieba 和 Word2vec 的关键词词库构建