注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971

友情提醒:仅供参考理解,请勿直接复制粘贴

友情提醒:仅供参考理解,请勿直接复制粘贴

友情提醒:仅供参考理解,请勿直接复制粘贴

文章目录

  • 零、题目
  • 一、创建目录、文件
  • 二、编译
    • 1、多步编译
    • 2、一步编译
  • 三、GDB调试
    • 1、用makefile文件和make命令编译
    • 2、gdb调试

零、题目

一、使用gedit编辑器完成以下4个文件的内容输入

[操作步骤]
\qquad(1). 在/home目录下创建experiment3子目录,其命令:cd /homemkdir experiment3
\qquad(2). 在该目录下,创建以下四个文件,文件名:hello.hstarfun.hhello.cstar.c,并使用gedit编辑器进行编辑,其命令是:geidt hello.hgedit starfun.hgedit hello.cgedit star.c

starfun.h文件

/*****starfun.h*****/
#ifndef STARFUN_H
#define STARFUN_H
#define  NUM 4
#define  NUMBER 3
int star1() {int i,j,k;for(k=1;k<=NUM;++k) {for(i=1;i<=(NUM-k);++i)printf(" ");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return 0;
}int star2() {int i,j,k;for(k=NUMBER;k>=0;--k) {for(i=1;i<=(NUMBER-k+1);++i)printf(" ");for(j=1;j<=(2*k-1);++j)printf("*");printf("\n");}return 0;
}

hello.h文件

/*hello.h*/
#ifndef  HELLO_H
#define  HELLO_H
void hello()   {star1();printf("hello,my friends\n");
}
#endif

hello.c文件

void showhello()  {hello();
}

star.c文件

#include "starfun.h"
#include "hello.h"
#include <stdio.h>int main() {star1();star2();showhello();return 0;
}

二、使用gcc编译器,编译程序

[操作步骤]
\qquad(1). 第一种方法:分步进行
\qquad(2). 用一条命令完成以上操作


三、GDB调试器的使用

[操作步骤]
\qquad(1). 编写C源程序,并使用Makefile编译
\qquad\qquad ① 创建revertnum.c文件如下:

#include <stdio.h>
void ShowRevertNum(int iNum){while (iNum > 10)
{printf("%d", iNum % 10);
iNum = iNum / 10;
}
printf("%d\n", iNum);
}
int main(void){int iNum;
while(1){printf("Please input a number :");scanf("%d", &iNum);if (iNum<=0){break;}
printf("After revert : ");
ShowRevertNum(iNum);
}

\qquad\qquad ② 创建makefile文件
\qquad\qquad ③ 执行make编译程序

\qquad(2). 使用gdb调试程序
\qquad\qquad 执行gdb revertnum进入gdb调试

\qquad\qquadgdb相关操作
\qquad\qquad\qquadA. 查看文件,在gdb中键入“l”(list)就可以查看所载入的文件
\qquad\qquad\qquadB.设置断点 ,在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可
\qquad\qquad\qquadC.查看断点情况,在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点
\qquad\qquad\qquadD.运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可
\qquad\qquad\qquadE.查看变量值,在gdb中只需键入“p”+变量值即可
\qquad\qquad\qquadF.单步运行,单步运行可以使用命令“n”(next)或“s”(step)
\qquad\qquad\qquadG. 恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了

一、创建目录、文件

使用如下命令跳转,并创建目录进入

cd /home
mkdir experiment3
cd experiment3/gedit hello.h
gedit starfunc.h
gedit star.c
gedit hello.c

示例截图

二、编译

1、多步编译

使用如下命令分多步编译出程序

# 可参考 https://blog.csdn.net/weixin_33755847/article/details/89697445# 1、预编译
#   设置参数-E表示进行预编译
#   设置参数-o指定要生成的文件
gcc -E hello.c -o hello.i
gcc -E star.c -o star.i# 2、编译
#   设置参数-S表示进行编译
#   设置参数-o指定要生成的文件
#   设置参数-w忽略编译时的警告
gcc -S hello.i -o hello.s -w
gcc -S star.i -o star.s -w# 3、汇编
#   设置参数-c表示进行汇编
#   设置参数-o指定要生成的文件
gcc -c hello.s -o hello.o
gcc -c star.s -o star.o# 4、链接
#   将多个.o文件链接到一起,生成目标程序
#   设置参数-o指定要生成的文件
gcc hello.o star.o -o exp3

示例截图

2、一步编译

使用如下命令一步编译出程序

# gcc命令编译
#   设置参数-o 指定生成的文件名
#   设置参数-w 忽略警告(warnings可太多了,看着头疼)
gcc star.c hello.c -o exp3 -w
./exp3

示例截图

三、GDB调试

1、用makefile文件和make命令编译

创建.c源文件

gedit revertnum.c

revertnum.c文件

#include <stdio.h>
void ShowRevertNum(int iNum) {while (iNum > 10){printf("%d", iNum % 10);iNum = iNum / 10;}printf("%d\n", iNum);
}
int main(void) {int iNum;while (1) {printf("Please input a number :");scanf("%d", &iNum);if (iNum <= 0) { break; }printf("After revert : ");ShowRevertNum(iNum);}
}

示例截图


创建makefile文件,写入GCC编译指令(都加上参数-g以生成调试信息)

gedit makefile
revertnum : revertnum.ogcc -g revertnum.o -o revertnumrevertnum.o : revertnum.sgcc -g -c revertnum.s -o revertnum.orevertnum.s : revertnum.igcc -g -S revertnum.i -o revertnum.s -wrevertnum.i : revertnum.cgcc -g -E revertnum.c -o revertnum.i

示例截图


使用make进行编译

make

示例截图

2、gdb调试

使用gdb命令调试

gdb revertnum

示例截图

在gdb环境下

  • 输入llist查看文件信息
  • 输入b 行号设置断点
  • 输入info b查看断点情况
  • 输入rrun开始调试程序(程序结束前只需要输入1次)
  • 输入p 变量名查看相应变量
  • 输入n进行单步调试(Step over,不进入函数体内)
  • 输入s进行单步调试(Step into,进入函数体内)
  • 输入c继续调试运行到下一个断点处

《Linux编程》上机作业 ·002【Linux常用工具GCC、GDB、Make】相关推荐

  1. 《Linux编程》作业 ·002【Shell编程】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 友情提醒:仅供参考理解,请勿直接复制粘贴 友情提醒:仅供参考理 ...

  2. linux编程课后作业,Unix/Linux 编程实践教程第三章习题

    tips: 答案仅供参考,不保证正确* 3.1 在我的 deepin 上,d_name 的长度是 256,有的系统定义成 1 是为了节省空间,使用时可以通过 malloc() 动态的分配空间,比如: ...

  3. 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...

  4. 秒杀迅雷的linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel

    本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 下面就为大家详细介绍一下这些工具 1. Wget Wget是一个十分常用命令行下载 ...

  5. 【Linux编程】二、Linux常见工具和项目开发(思维导图总结)

    文章目录 Linux 软件包管理工具 yum 什么是软件包? 关于rzsz 注意事项 查看软件包 如何安装软件 如何卸载软件 总结:三板斧操作 用yum来安装几个好玩的东西 前期准备 安装小火车 安装 ...

  6. linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf

    Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...

  7. Linux下获取设备IPMI信息常用工具

    1.asu (1)概述 asu是IBM官方提供的一个命令行工具,全称IBM Advanced Settings Utility,可以对IMM进行操作. (2)安装 从官网上下载asu对应的RPM安装包 ...

  8. 《Linux编程》作业 ·003【文件I/O操作】

    注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 友情提醒:仅供参考理解,请勿直接复制粘贴 友情提醒:仅供参考理 ...

  9. Linux系统管理上机作业2

    chapter02 - 03 作业 1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [root@ ...

最新文章

  1. 深入分析 java 8 编程语言规范:Threads and Locks
  2. acwing算法题--铁路与公路
  3. cwinthread*线程指针怎么销毁结束_C++知识点:智能指针
  4. python list大小_4个python常用高阶函数的使用方法
  5. springcloud Feign断路器实战和问题总结
  6. awk将txt转换为csv
  7. 架构之美-最强卷积神经网络架构设计初想
  8. 海思3516dv300之bmi160/LSM6DS3驱动总结
  9. mysql删表重来_BeetlSQL自定义NameConversion去除Pojo和表前缀
  10. intelssd在linux固件升级,Intel固件升级教程修复320系列SSD 8M丢数据问题
  11. 从随机生成九宫格至随机生成数独游戏再至用回溯法实现数独的解
  12. 设置网站 titile keyword 以及 descript
  13. xilinx 高速收发器Serdes深入研究 GTX-3(时钟纠正clock correction)
  14. 常用CASE工具介绍 1
  15. ios 弹起软键盘position: fixed;失效
  16. win10下Abaqus 6.14 安装
  17. 微服务之间的最佳调用方式
  18. 武汉云数时代网络科技有限公司网店代运营托管优势?
  19. 商品评价实体情感识别项目
  20. 遇到同事求助时需要帮助的3件事情,别说你不知道

热门文章

  1. 数据分析方法(一):对比与对标
  2. excel插入一列日期 pandas_在Excel目标列插入日期控件的方法
  3. python运行时间只算快的吗_Python 疑难问题:[] 与 list() 哪个快?为什么快?快多少呢?...
  4. docker 安装mysql_安装docker并使用docker安装mysql
  5. cad卸载_CAD卸载清理工具(一键清理)
  6. 数据结构 3-1-1 栈
  7. GAN——欧几里得空间
  8. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  9. Linux交叉编译+粤嵌LCD实现三色图
  10. [查找问题] 例5.2 查找学生信息