gcc与gdb

gcc

gcc main.c a.c b.c -o main

gcc编译过程,现在是一步到位

编译的步骤:

1. 预处理
    处理的是程序中 以 # 开头的行
    a.头文件的包含
    b.#define 宏定义 
    c.条件编译
    gcc -E main.c -o main.i
    =>main.i就是预处理生成的文件

2. 编译
    把c程序 编译 汇编文件 c=>asm
    gcc -S main.i(main.c) -o main.s
        把main.i 编译成汇编代码,输出文件名字 main.s

3. 汇编
    把汇编程序编译成一个目标文件(机器指令文件)
    gcc -c main.s(main.c) -o main.o
        把一个汇编文件编译成含有机器指令的文件main.o
    note:
        目标文件虽然是二进制文件 但是不能运行
    
    目标文件由两个部分组成:
        代码段:程序的指令,可读 可执行的,一般不可写
        数据段:常量,局部变量,静态变量

4. 链接
    把各个目标文件连接成一个可执行文件
    gcc main.o a.o b.o(main.c a.c b.c) -o main

gdb

是单步调试的命令行工具 ,它可以使用你的程序 在你输入命令后,才会运行,而且打印中间变量的值
输入gdb 显示gdb的版本信息
1)
    gcc -g main.c -o main
    // gcc main.c -o main -g
        -g 加入gdb的调试信息
2)调试程序
    gdb 可执行的程序
    eg:
        gdb main

gdb 调试命令
    b 
      
 breakpoint 用于设置断点
            断点?
                程序执行到此处 会暂停 等待用户输入指令 才能继续运行
        
        b line_num
            设置断点的行
        b 函数名
            -> 设置函数为一个断点

    
    info b
        查看所有的断点

    
    d   

         删除断点
        d 断点编号 
            如果后面不加编号 选择全部断点删除

    
    r
        运行代码,直到断点处或程序结束

    
    n
        下一步
        单步运行

    
    s
        下一步
        区别:
            n把函数调用当成是一步,直接把调用函数执行完
            s会进入函数的内部
    
    note:
        n s 只有设置了断点 用 r 运行才可以

    print 变量名
        打印变量的值

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

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

相关文章

Grounding Answers for Visual Questions Asked by Visually Impaired People

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 相关工作 主要贡献 论文主要方法 实验数据 未来研究方向 二、论文精度 论文试图解决什么问题? 论文中提到的解决方案之关键是什么? 用于定量评估的数据集是什么?代码有没有开源&…

由于设置了全局 QWidget 背景导致QT QCalendarWidget 表态背景异常

解决: 单独设置QCalendarWidget 的qss : 对象是查看源码所得 QWidget#qt_calendar_navigationbar{ ...... } QToolButton#qt_calendar_prevmonth, #qt_calendar_nextmonth, #qt_calendar_monthbutton, #qt_calendar_yearbutt…

★数据库建表优化

1、冷热分离: 一个表里最好不要存在即有常修改的数据又有不常修改的数据,一个好的做法是,把常修改更新的字段当做热表单独建表,同理不经常修改更新的字段当做冷表单独建表。 2、控制B树的高度: 也就是控制一个表存储的…

【Spark入门】基础入门

【大家好,我是爱干饭的猿,本文重点介绍Spark的定义、发展、扩展阅读:Spark VS Hadoop、四大特点、框架模块、运行模式、架构角色。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍&#xff…

跨境人速看!2024跨境电商选品技巧和蓝海产品推荐

跨境电商小伙伴们,你们是不是常常在为选品而发愁?也为找不到蓝海市场而苦恼?不要担心,东哥今天来帮你!首先,要想找到蓝海市场,就不能只看销量!除了销量,还要看这个市场是…

MySQL数据库 编程入门

目录 MySQL数据库数据类型 MySQL数据库命令执行 创建用户 创建删除库 创建删除表 MySQL数据库数据类型 MySQL数据库定义了多种数据类型,下面是一些常见的MySQL数据类型及其对应的C/C类型: 整数类型: TINYINT:有符号范围-1…

AWVS 使用方法归纳

1.首先确认扫描的网站,以本地的dvwa为例 2.在awvs中添加目标 输入的地址可以是域名也可以是ip,只要本机可以在浏览器访问的域名或ip即可 添加地址及描述之后,点击保存,就会展现出目标设置选项 business criticality译为业务关键…

1.Spring源码解析-ClassPathXmlApplicationContext

此类是读取spring的xml配置文件并解析。也是源码入口之一。 我们调试即将开始。 传递给父类设置值 经调试我们得到是给AbstractApplicationContext设置默认的应用上下文父级的值,很明显是空 给父类AbstractRefreshableConfigApplicationContext设置属性 刷新容器…

CentOS7.5安装zookeeper3.9.1详细步骤

备注:Zookeeper依赖Java环境变量,请确保当前环境中有JDK环境 export JAVA_HOME/opt/module/jdk1.8.0_221 export PATH$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar下载安装包: 进入Zookeeper官…

C++STL库常用详解与原理

CSTL库 学习方法&#xff1a;使用STL的三个境界&#xff1a;能用&#xff0c;明理&#xff0c;能扩展。 常用库 库名称所需头文件数据结构string#include<string>串vector#include<vector>动态数组list#include<list>带头双向循环链表queue#include<queu…

极客大挑战2023 Web方向题解wp 全

最后排名 9/2049。 玩脱了&#xff0c;以为28结束&#xff0c;囤的一些flag没交上去。我真该死啊QAQ EzHttp 前言&#xff1a;这次极客平台太安全了谷歌不给抓包&#xff0c;抓包用burp自带浏览器。 密码查看源码->robots.txt->o2takuXX’s_username_and_password.txt获…

VAE模型及pytorch实现

VAE模型及pytorch实现 VAE模型推导部分最小化KL散度推导代码部分损失函数Encoder部分Decoder部分VAE整体架构 VAE问题参考资料 VAE&#xff08;变分自编码器&#xff09;是一种生成模型&#xff0c;结合了自编码器和概率图模型的思想。它通过学习数据的潜在分布&#xff0c;可以…

Make sure that using this pseudorandom number generator is safe here.

问题类型&#xff1a;安全热点 安全问题级别&#xff1a;MEDIUM 一、问题代码 工具类Package&#xff1a; Java commons-lang3 库 RandomUtils 随机数工具类 import org.apache.commons.lang3.RandomUtils; 用法&#xff1a; RandomUtils.nextInt(0, 999999999) //生成 0…

31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap

目录 31.1Linkedlist 31.2Set集合 31.3HashSet集合 31.4添加元素 31.5删除 31.6hashSet的遍历 31.7hashSet的源码 31.8TreeSet集合。 31.1Linkedlist 1.凡是查询源码 &#xff0c;我们都是从类的构造方法入手:/*** Constructs an empty list.*/public LinkedList() {}该…

【Java从入门到大牛】网络编程

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Java从入门到大牛 &#x1f320; 首发时间&#xff1a;2023年11月23日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f4…

大数据 DataX-Web 详细安装教程

目录 一、DataX-Web 介绍 1.1 DataX-Web 是什么 1.2 DataX-Web 架构 二、DataX-Web 安装部署 2.1 环境要求 2.2 安装 2.3 部署 2.4 数据库初始化 2.5 配置 2.6 启动服务 2.6.1 一键启动所有服务 2.6.2 一键取消所有服务 2.7 查看服务&#xff08;注意&#xff01…

线性分类器--图像表示

整个模型 图像表示 二进制图像 灰度图像 彩色图像 大多数分类算法都要求输入向量&#xff01; rbg的图像矩阵转列向量 大小为 32X32 的话&#xff0c;图像矩阵转列向量是多少维&#xff1f; 32x32x3 3072 维列向量

监控大屏 | 拐角OLED柔性屏:实现拐角处连惯拼接显示

监控大屏 | 拐角OLED柔性屏 产品&#xff1a;20块55寸OLED柔性屏 项目时间&#xff1a;2023年10月 项目地点&#xff1a;贵州 应用场景&#xff1a;在监控大厅三面墙都要装显示屏&#xff0c;利用OLED柔性屏可弯曲的特性&#xff0c;在两个捌角处进行拼接安装。 在2023年10…

如何一分钟内画好可视化图形?

一、定类数据 饼图 描述&#xff1a;用形状类似“饼”的形态描述数据的占比&#xff0c;并且参与绘制的数值没有负值&#xff0c;比如想要直观的查看“月生活费各个板块的占比”。 操作&#xff1a;以SPSSAU为例&#xff0c;使用“频数分析”即可。 示例&#xff1a; 圆环图…

展开运算符 ...

展开运算符 ... 什么是展开运算符...展开数组作为函数参数复制数组合并数组展开对象&#xff08;在某些 JavaScript 版本中&#xff09;注意事项 什么是展开运算符… 展开运算符&#xff08;Spread Operator&#xff09;是 JavaScript 中用于展开可迭代对象&#xff08;如数组…