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

【工具】-gdb-学习笔记

准备工作

  • 程序的发布方式有两种,debug模式和release模式

  • Linux gcc/g++出来的二进制程序,默认是release模式

  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,发布成debug模式

如下源代码经过编译:

   #include <stdio.h>int SumAdd(int x){int i=1;int sum=0;for(i=1;i<=x;i++){sum+=i;}return sum;
}int main()
{printf("%d \n",SumAdd(100));return 0;
}            

命令:gcc -o test test.c -g
在这里插入图片描述

gdb调试

命令:gdb test

在这里插入图片描述

l或者l函数名查看源代码(默认显示10行)

在这里插入图片描述

r或者run运行程序,没有设置断点,会运行完。

在这里插入图片描述

b或者break行号、地址、函数名设置断点;info b 显示所有断点信息

在这里插入图片描述

n或者next单步执行(enter重复执行上个命令)

这里可以看到寄存器区域(rbp,rsp,rip)、汇编代码、源代码、栈区域。
在这里插入图片描述在这里插入图片描述

stack 数量,查看栈空间

在这里插入图片描述

s或者step,进入函数单步调用

在这里插入图片描述

finish跳出当前函数调用,对于嵌套比较多的系统函数调用非常有用

可以看到是进入了上一个函数,main函数,等待下一步命令
在这里插入图片描述

p+变量名打印变量值

在这里插入图片描述

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

在这里插入图片描述

delete breakpoints:删除所有断点;delete breakpoints n:删除序号为n的断点;disable breakpoints:禁用断点;enable breakpoints:启用断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值;undisplay:取消对先前设置的那些变量的跟踪
x *n/$rip :查看内存值
set :设置变量
until X(行号):跳至X行
q或quit:退出gdb

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 推动未来的引擎:人工智能大模型的现状与发展
  • 基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划(MATLAB代码)
  • 云计算学习——5G网络技术
  • 前端开发者必备:揭秘谷歌F12调试的隐藏技巧!
  • PixelMaster - 图片像素化终极利器 !
  • U盘数据恢复不再难:2024年4款工具,找回你“躲藏”的记忆
  • BootStrap前端面试常见问题
  • 【刷题汇总 -- 爱吃素、相差不超过k的最多数、最长公共子序列(一)】
  • 常回家看看之fastbin_attack
  • JVM知识体系梳理
  • PTA—基础编程题目集(7-18)
  • 【2024蓝桥杯/C++/B组/小球反弹】
  • 第五十八天 第十一章:图论part08 拓扑排序精讲 dijkstra(朴素版)精讲
  • 工业大数据通过哪些方式实现价值?详解实施工业大数据的难点!
  • 数据采集器
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • AHK 中 = 和 == 等比较运算符的用法
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Docker: 容器互访的三种方式
  • echarts的各种常用效果展示
  • ES6--对象的扩展
  • JavaScript对象详解
  • nodejs实现webservice问题总结
  • PHP 7 修改了什么呢 -- 2
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue全家桶实现一个Web App
  • 大型网站性能监测、分析与优化常见问题QA
  • 第2章 网络文档
  • 番外篇1:在Windows环境下安装JDK
  • 关于List、List?、ListObject的区别
  • 精彩代码 vue.js
  • 扑朔迷离的属性和特性【彻底弄清】
  • 算法---两个栈实现一个队列
  • 我的zsh配置, 2019最新方案
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #数据结构 笔记三
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (30)数组元素和与数字和的绝对差
  • (C++17) std算法之执行策略 execution
  • (补充)IDEA项目结构
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (九十四)函数和二维数组
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)终结任务
  • .net core Redis 使用有序集合实现延迟队列
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .stream().map与.stream().flatMap的使用