linux下的工具---gdb

一、gdb简介

GDB,是The GNU Project Debugger 的缩写,是 Linux 下功能全面的调试工具。 GDB支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。

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

二、gdb基础命令操作

1、进入gdb :gdb +可执行程序名

2、退出gdb:ctrl + d 或 quit 调试命令

3、显示代码:l

输入list可显示代码,简写为l,不会一次显示全部代码。
由于gdb会记录历史命令即最近一条命令,如果命令无变化可以回车继续执行该命令。

4、开始调试:r

r :开始调试,若没有断点,则直接结束

5、打断点:b 行号

6、显示断点信息:info b

7、删断点:d 编号

由于打断点时系统会给断点编号,删除时用不得行号,可用编号进行删除。

8、逐过程:n

(gdb) n
7	  for(i = 0;i <= 100;i++)
(gdb) n
9	    res+=i;

9、逐语句:s

(gdb) s
7	  for(i = 0;i <= 100;i++)

10、直接跑完当前函数并停下:finish

(gdb) finish
Run till exit from #0  AddToTop (top=100) at mytest.c:7
0x0000000000400579 in main () at mytest.c:18
18	  int result = AddToTop(top);
Value returned is $1 = 5050
(gdb) bt
#0  0x0000000000400579 in main () at mytest.c:18

11、进入堆栈:bt

(gdb) bt
#0  AddToTop (top=100) at mytest.c:7
#1  0x0000000000400579 in main () at mytest.c:18

12、常显示:dispaly 变量名

(gdb) display res
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 0
(gdb) n
9	    res+=i;
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 0
(gdb) n
9	    res+=i;
1: res = 0
(gdb) n
7	  for(i = 0;i <= 100;i++)
1: res = 1
(gdb) n
9	    res+=i;
1: res = 1

13、取消常显示:undisplay 编号

(gdb) undisplay 1
(gdb) n
7	  for(i = 0;i <= 100;i++)

14、跳转到指定行:until 指定行

(gdb) until 18
0x0000000000400579 in main () at mytest.c:18
18	  int result = AddToTop(top);

15、运行至下一个断点处停下:c

(gdb) c
Continuing.
result:5050
[Inferior 1 (process 18009) exited normally]

16、禁用断点:disable 编号

(gdb) disable 1
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep n   0x000000000040053b in AddToTop at mytest.c:6breakpoint already hit 1 time

注意看,断点1的End变成了n,表示被禁用

17、取消禁用:enable 编号

(gdb) enable 1
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040053b in AddToTop at mytest.c:6breakpoint already hit 1 time

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自驾游汽车托运是交智商税吗?

自驾游汽车托运是交智商税吗? 亲爱的小伙伴们 你们有没有遇到过这样的困扰&#xff1a; 自驾游时&#xff0c;车辆的运输问题让你头疼不已? 是选择自己驾驶还是托运呢? 今天&#xff0c;我就来给大家种草一下汽车托运的好处&#xff0c; 让你的自驾游之旅更加轻松愉快! 1️.…

安防视频监控/磁盘阵列/集中云存储平台EasyCVR设备录像保活不生效原因是什么?该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【Linux】安卓端JuiceSSH结合内网穿透实现远程连接服务器

目录 前言1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 前言 处于内网的虚拟机如何被外网访问呢&#xff1f;如何手机就能访问虚拟机呢&#xff1f; 本文介绍 cpolarJuiceSSH 实现手机端远程连接Linux虚拟…

elk日志分析系统:

elk日志分析系统: elk是一套完整的日志集中处理方案&#xff0c;由三个开源的软件简称组成&#xff1b; E:Easticsearch 简称ES是一个开源的&#xff0c;分布式的存储检索引擎&#xff0c;&#xff08;索引型的非关系数据库&#xff09;存储日志 由java代码开发的&#xff0…

CSC公派博士后|管理学老师赴韩国首尔大学达成目标

J老师自身背景正好卡在CSC公派博士后申报条件的边缘&#xff0c;为增大通过概率&#xff0c;其提出优选亚洲范围内的世界知名高校、专业相符、2年博士后职位的要求。最终我们用韩国首尔大学的邀请函助其顺利获批CSC&#xff0c;实现了所有既定目标。 J老师背景&#xff1a; 申…

【Tiny_CD】Tiny_CD变化检测网络详解(含python代码)

题目:TinyCD: A (Not So) Deep Learning Model For Change Detection 论文:paper 代码:code 目录 🍟 🍟1.摘要 🍗🍗 2.贡献 🍖🍖 3.网络结构

前端必学——实现电商图片放大镜效果(附代码)

放大镜可以说是前端人必须学会的程序之一,今天的案例为大家展示一下怎么实现放大镜的效果&#xff01; 效果图展示 整个效果就是当鼠标放到展示图上的时候&#xff0c;会出现一个遮罩层以及弹出来一个框展示一个详情图&#xff0c;并且鼠标移动的时候详情图跟着移动&#xff0…

家乡旅游推广软文怎么写?媒介盒子分享

随着各地政策的放开&#xff0c;旅行已经成为很多消费者生活中不可缺少的一项&#xff0c;各地景区也在宣传上纷纷发力&#xff0c;希望能够吸引游客。只要文案写得好&#xff0c;没有景点火不了&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;家乡旅游推广软文怎么写。 一…

独乐乐不如众乐乐(二)-某汽车零部件厂商IC EMC企业规范

前言&#xff1a;该汽车零部件厂商关于IC EMC的规范可能是小编看过的企业标准里要求最明确的一份企业标准了&#xff0c;充分说明了标准方法不是死的&#xff0c;可以灵活应用。 先看看这份规范的抬头&#xff1a; 与其他企业规范一样&#xff0c;该汽车零部件厂商的IC EMC规范…

TDA4开发环境Docker化

文章目录 背景1. TDA4X Linux SDK编译环境镜像构建1.1 安装SDK1.2 验证制卡1.2.1 出现的问题:1.3 验证编译1.3.1 出现的问题2. TDA4X Linux-RT SDK编译环境镜像构建2.1 安装SDK2.2 出现的问题参考背景 开始阅读本篇前,假设你已经对docker有了一定了解,且有过docker换件搭建…

1、Linux_介绍和安装

1. Linux概述 Linux&#xff1a;是基于Unix的一个开源、免费的操作系统&#xff0c;其稳定性、安全性、处理多并发能力强&#xff0c;目前大多数企业级应用甚至是集群项目都部署运行在linux操作系统之上&#xff0c;在我国软件公司得到广泛的使用 Unix&#xff1a;是一个强大…

聊聊如何进行代码混淆加固

​ 聊聊如何进行代码混淆 前言什么是代码混淆代码混淆&#xff0c;是指将计算机程序的代码&#xff0c;转换成一种功能上等价&#xff0c;但是难于阅读和理解的形式的行为。 代码混淆常见手段1、名称混淆 将有意义的类&#xff0c;字段、方法名称更改为无意义的字符串。生成…

CSGO搬砖还能做吗?CSGO饰品未来走势如何?

steam/csgo搬砖项目真能月入过万吗&#xff1f;到底真的假的&#xff1f; 如何看待CSGO饰品市场的整体走向&#xff1f; 从整体来说&#xff0c;CSGO的饰品市场与规模肯定会持续不断的上升&#xff0c;大盘不会发生特别大的波动&#xff0c;目前处于稳定期&#xff01;&…

【C++干货铺】非类型模板 | 模板特化 | 模板分离编译

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 非类型模板参数 模板的特化 什么是模板特化&#xff1f; 函数模板特化 类模板的特化 全特化 偏特化 模板的分离编译 什么是分离编译&#xff1f; 模板的…

单细胞featureplot美化修改-自定义修改图片样式-umap密度图画等高线

大家好&#xff0c;欢迎来的单细胞图片美化专辑 1.如何修改seruat对象的行名 2.FeaturePlot如何把所有阳性表达的spot放到图的前面 在单细胞实践中&#xff0c;我发现不同的客户对画图需求并不一致&#xff0c;这可能和个人审美有关吧。本专辑着重于各种各样的单细胞个性化绘…

Vatee万腾科技的数字化奇迹:Vatee创新力量的前瞻探讨

在数字化的潮流中&#xff0c;Vatee万腾科技以其独特而强大的创新力量&#xff0c;创造了一系列数字化奇迹&#xff0c;引领着科技的前沿发展。这不仅是对技术的突破&#xff0c;更是对未来的深刻探讨&#xff0c;为整个数字化时代描绘出一幅充满奇迹的画卷。 Vatee万腾以创新为…

入侵redis之准备---Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制

入侵redis之准备—Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制 几点需要知道的信息 【1】crontab一般来说服务器都是有的&#xff0c;依赖crond服务&#xff0c;这个服务也是必须安装的服务&#xff0c;并且也是开机自启动的服务&#xff0c;也就是说&…

【Linus】进程的等待

进程等待的必要性 如果子进程退出了&#xff0c;父进程没有对子进程进行回收&#xff0c;子进程就会进入僵尸进程&#xff0c;占用内存&#xff0c;导致内存泄漏如果程序进入僵尸状态&#xff0c;那么kill -9 也无法强制杀死进程子进程是父进程创建出来&#xff0c;完成父进程…

自动驾驶中的LFM(LED 闪烁缓解)问题

自动驾驶中的LFM Reference: 自动驾驶系统如何跨越LFM这道坎&#xff1f; 从路灯、交通灯&#xff0c;到车载照明&#xff0c;低功耗、长寿命、高可靠的 LED 正在快速取代传统照明方式。但 LED 在道路上的普遍使用&#xff0c;却带来“LED闪烁”现象。“LED闪烁”是由 LED 驱…

【JavaEE】Java中的多线程 (Thread类)

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…