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

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

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

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

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

零、题目

一、使用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\qquad gdb相关操作
\qquad\qquad\qquad A. 查看文件,在gdb中键入“l”(list)就可以查看所载入的文件
\qquad\qquad\qquad B.设置断点 ,在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可
\qquad\qquad\qquad C.查看断点情况,在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点
\qquad\qquad\qquad D.运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可
\qquad\qquad\qquad E.查看变量值,在gdb中只需键入“p”+变量值即可
\qquad\qquad\qquad F.单步运行,单步运行可以使用命令“n”(next)或“s”(step)
\qquad\qquad\qquad G. 恢复程序运行,可以使用命令“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.o
	gcc -g revertnum.o -o revertnum

revertnum.o : revertnum.s
	gcc -g -c revertnum.s -o revertnum.o

revertnum.s : revertnum.i
	gcc -g -S revertnum.i -o revertnum.s -w

revertnum.i : revertnum.c
	gcc -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继续调试运行到下一个断点处
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

God-Excious

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值