《Linux编程》上机作业 ·002【Linux常用工具GCC、GDB、Make】
注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971
友情提醒:仅供参考理解,请勿直接复制粘贴
友情提醒:仅供参考理解,请勿直接复制粘贴
友情提醒:仅供参考理解,请勿直接复制粘贴
文章目录
- 零、题目
- 一、创建目录、文件
- 二、编译
- 1、多步编译
- 2、一步编译
- 三、GDB调试
- 1、用makefile文件和make命令编译
- 2、gdb调试
零、题目
一、使用gedit编辑器完成以下4个文件的内容输入
[操作步骤]
\qquad(1). 在/home
目录下创建experiment3
子目录,其命令:cd /home
、mkdir experiment3
\qquad(2). 在该目录下,创建以下四个文件,文件名:hello.h
、starfun.h
、hello.c
、star.c
,并使用gedit编辑器进行编辑,其命令是:geidt hello.h
、gedit starfun.h
、gedit hello.c
、gedit 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环境下
- 输入
l
或list
查看文件信息
- 输入
b 行号
设置断点
- 输入
info b
查看断点情况
- 输入
r
或run
开始调试程序(程序结束前只需要输入1次)
- 输入
p 变量名
查看相应变量
- 输入
n
进行单步调试(Step over,不进入函数体内)
- 输入
s
进行单步调试(Step into,进入函数体内)
- 输入
c
继续调试运行到下一个断点处
《Linux编程》上机作业 ·002【Linux常用工具GCC、GDB、Make】相关推荐
- 《Linux编程》作业 ·002【Shell编程】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 友情提醒:仅供参考理解,请勿直接复制粘贴 友情提醒:仅供参考理 ...
- linux编程课后作业,Unix/Linux 编程实践教程第三章习题
tips: 答案仅供参考,不保证正确* 3.1 在我的 deepin 上,d_name 的长度是 256,有的系统定义成 1 是为了节省空间,使用时可以通过 malloc() 动态的分配空间,比如: ...
- 《Linux编程》学习笔记 ·002【Linux常用工具GCC、GDB、Make】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 一.GCC编译器 1.GCC编译程序的流程 2.GC ...
- 秒杀迅雷的linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel
本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 下面就为大家详细介绍一下这些工具 1. Wget Wget是一个十分常用命令行下载 ...
- 【Linux编程】二、Linux常见工具和项目开发(思维导图总结)
文章目录 Linux 软件包管理工具 yum 什么是软件包? 关于rzsz 注意事项 查看软件包 如何安装软件 如何卸载软件 总结:三板斧操作 用yum来安装几个好玩的东西 前期准备 安装小火车 安装 ...
- linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf
Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...
- Linux下获取设备IPMI信息常用工具
1.asu (1)概述 asu是IBM官方提供的一个命令行工具,全称IBM Advanced Settings Utility,可以对IMM进行操作. (2)安装 从官网上下载asu对应的RPM安装包 ...
- 《Linux编程》作业 ·003【文件I/O操作】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 友情提醒:仅供参考理解,请勿直接复制粘贴 友情提醒:仅供参考理 ...
- Linux系统管理上机作业2
chapter02 - 03 作业 1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容,并用自己的话总计出这三个文档操作命令的不同之处? [root@ ...
最新文章
- 深入分析 java 8 编程语言规范:Threads and Locks
- acwing算法题--铁路与公路
- cwinthread*线程指针怎么销毁结束_C++知识点:智能指针
- python list大小_4个python常用高阶函数的使用方法
- springcloud Feign断路器实战和问题总结
- awk将txt转换为csv
- 架构之美-最强卷积神经网络架构设计初想
- 海思3516dv300之bmi160/LSM6DS3驱动总结
- mysql删表重来_BeetlSQL自定义NameConversion去除Pojo和表前缀
- intelssd在linux固件升级,Intel固件升级教程修复320系列SSD 8M丢数据问题
- 从随机生成九宫格至随机生成数独游戏再至用回溯法实现数独的解
- 设置网站 titile keyword 以及 descript
- xilinx 高速收发器Serdes深入研究 GTX-3(时钟纠正clock correction)
- 常用CASE工具介绍 1
- ios 弹起软键盘position: fixed;失效
- win10下Abaqus 6.14 安装
- 微服务之间的最佳调用方式
- 武汉云数时代网络科技有限公司网店代运营托管优势?
- 商品评价实体情感识别项目
- 遇到同事求助时需要帮助的3件事情,别说你不知道
热门文章
- 数据分析方法(一):对比与对标
- excel插入一列日期 pandas_在Excel目标列插入日期控件的方法
- python运行时间只算快的吗_Python 疑难问题:[] 与 list() 哪个快?为什么快?快多少呢?...
- docker 安装mysql_安装docker并使用docker安装mysql
- cad卸载_CAD卸载清理工具(一键清理)
- 数据结构 3-1-1 栈
- GAN——欧几里得空间
- 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
- Linux交叉编译+粤嵌LCD实现三色图
- [查找问题] 例5.2 查找学生信息