Linux的调试工具 - gdb(超详细)

2023-09-17 21:23:34

1. 背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式
    在这里插入图片描述

2. 开始使用

指令的使用都用下面这个C语言简单小代码来进行演示:

  1 #include <stdio.h>
  2 
  3 int SumAdd(int x)
  4 {
  5     int i=1;
  6     int sum=0;
  7     for(i=1;i<=x;i++)
  8     {
  9         sum+=i;
 10     }
 11     return sum;
 12 }
 13 
 14 int main()
 15 {
 16     printf("%d \n",SumAdd(100));
 17     return 0;
 18 }            

1. list或l 行号:显示文件源代码,接着上次的位置往下列,每次列10行。

例:l 0

在这里插入图片描述


2. list或l 函数名:列出某个函数的源代码。

例:l SumAdd

在这里插入图片描述


3. r或run: 运行程序。

注: 如果没有断点,程序将运行到底

例:r

在这里插入图片描述


4. break或b 行号:在某一行设置断点

例:b 3

在这里插入图片描述


5. n或next:单条执行(类似vs中的F10)

注: 单条执行需要在调试启动的情况下进行,需要先打断点,然后r执行到断点位置

例:n

在这里插入图片描述


6. s或step:进入函数调用(类似vs中的F11)

例:s

在这里插入图片描述


7. break 函数名:在某个函数开头设置断点

例:break SumAdd

在这里插入图片描述


8. info break或info b:查看断点信息。

例:info b

在这里插入图片描述


9. finish:执行到当前函数返回,然后挺下来等待命令

例:finish

在这里插入图片描述


10. p 变量:打印变量值。

例:p sum

在这里插入图片描述


11. continue或c:从当前位置开始连续而非单步执行程序

例:c

在这里插入图片描述


12. run或r:从开始连续而非单步执行程序

r

在这里插入图片描述

13. delete breakpoints:删除所有断点

例;delete breakpoints

在这里插入图片描述


14. delete breakpoints n:删除序号为n的断点

delete breakpoints 5

在这里插入图片描述


15. disable breakpoints:禁用断点

例:disable breakpoints

在这里插入图片描述


16. enable breakpoints:启用断点

例:enable breakpoints

在这里插入图片描述


17. display 变量名:跟踪查看一个变量,每次停下来都显示它的值

例:display sum

在这里插入图片描述


18. undisplay:取消对先前设置的那些变量的跟踪

例:undisplay

在这里插入图片描述


19. until X(行号):跳至X行

例:until 11

在这里插入图片描述


20. breaktrace或bt:查看各级函数调用及参数

例:bt

在这里插入图片描述


21. q或quit:退出gdb

例:q

在这里插入图片描述

(本章完)

更多推荐

EPLAN_001#常用功能(一)

一、栅格设置、背景颜色设置二、插入设备图标(快捷键Insert)按TAB旋转方向三、¶通过左CTRL+ENTER输入四、移动属性文本、复制格式CTRL+B可以移动设备图形中的相关文本(或者右键—文本—移动属性文本)很对多个文本的,可以取消其固定五、改变方向(属性中选择相应的变量)六、直接编辑(可以快速修改元器件名称)七

蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇

LECIS同步通信同步通信提供了一种使用蓝牙LE在设备之间传输有时间限制的数据的方式。它提供了一个机制,允许多个接收器设备在不同的时间从相同的源接收数据,以同步它们对该数据的处理。LEAUDIO使用同步通信。当使用同步通信时,数据具有有限的时间有效期,在到期时被认为已过期。尚未传输的过期数据将被丢弃。这意味着设备只接收

AI 与大模型引新安全威胁?亚马逊云科技与领创集团的探索和实践

出品|CSDN云计算作为数字化底座,疫情后的安全需求仍在增长。据统计,2023年上半年国内GDP增速为5.4%,其中网络安全市场规模增长10%。另一面,今年爆火的AIGC与大模型,也在被攻击者利用,演化出新型的诈骗与攻击手段。在亚马逊云科技re:Inforce2023中国站上,领创集团信息安全总监赵海旭分享了AI与大模

大数据面试题:Flink延迟数据是怎么解决的

最近朋友面试某猪的时候,被问到一个问题答得面试官不太满意,问的是前司数据延迟问题是怎么解决的,我稍作整理。一、什么是延迟数据大数据处理过程中Join的场景太多太多了,几乎所有公司的APP都会涉及到两条流数据之间的维度拼接,将表变宽等场景,避免不了进行多流Join操作。同时join场景中受网络或物理设备等因素影响也有可能

184_Python 在 Excel 和 Power BI 绘制堆积瀑布图

184_Python在Excel和PowerBI绘制堆积瀑布图一、背景在2023年8月22日微软Excel官方宣布:在Excel原生内置的支持了Python。博客原文笔者第一时间就更新到了Excel的预览版,通过了漫长等待分发,现在可以体验了,先来看看效果。在Excel公式选项卡下Python菜单原来的Excel公示栏

使用PageHelper进行分页

使用PageHelper进行分页1.使用SpringBoot2.不使用SpringBoot的实现1.使用SpringBoot要在SpringMVC中使用PageHelper进行分页,你需要完成以下几个步骤:添加PageHelper依赖:在你的项目中添加PageHelper的Maven或Gradle依赖。例如,如果你使用

[效率提升]使用shell脚本完成一些git操作

[效率提升]使用shell脚本完成一些git操作根据分支名自动Add和Commit并Push到远程开发分支例如开发分支名为:feature-xxx功能Commit信息为:xxx功能#!/bin/bash#获取当前分支名称current_branch=$(gitrev-parse--abbrev-refHEAD)echo

计算机毕设 flink大数据淘宝用户行为数据实时分析与可视化

文章目录0前言1、环境准备1.1flink下载相关jar包1.2生成kafka数据1.3开发前的三个小tip2、flink-sql客户端编写运行sql2.1创建kafka数据源表2.2指标统计:每小时成交量2.2.1创建es结果表,存放每小时的成交量2.2.2执行sql,统计每小时的成交量2.3指标统计:每10分钟累计

【含java2023面试题】HashMap、HashTable、ConcurrentHashMap

作为Java中最常用的Map集合,HashMap、HashTable和ConcurrentHashMap都是线程安全的,但它们之间有什么区别呢?在本文中,我们将深入探讨这三种Map集合的区别,并通过Java代码示例来演示它们之间的差异。AI绘画关于SD,MJ,GPT,SDXL百科全书面试题分享点我直达2023Pytho

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashTable

前言上一章我们了解HashMap后,让我们深入研究HashTable,这是另一个键值对存储的数据结构。Hash表是一个非常重要且广泛用于编程中的数据结构,了解其工作原理和用法对于编写高效的程序非常重要。简述HashTable是Java中的一个古老的哈希表实现,它在Java的早期版本中被引入。虽然它在新的Java版本中不

Spark-3.2.4 高可用集群安装部署详细图文教程

目录一、Spark环境搭建-Local1.1服务器环境1.2基本原理1.2.1Local下的角色分布1.3搭建1.3.1安装Anaconda1.3.1.1添加国内阿里源1.3.2创建pyspark环境1.3.3安装spark1.3.4添加环境变量1.3.5启动spark1.3.5.1bin/pyspark1.3.5.2

热文推荐