第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 《Linux编程》上机作业 ·002【Linux常用工具GCC GDB Make】

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

时间:2019-04-03 17:36:01

相关推荐

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

注:前言、目录见 /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 3int 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_Hvoid 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 /homemkdir experiment3cd experiment3/gedit hello.hgedit starfunc.hgedit star.cgedit hello.c

示例截图

二、编译

1、多步编译

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

# 可参考 /weixin_33755847/article/details/89697445# 1、预编译# 设置参数-E表示进行预编译# 设置参数-o指定要生成的文件gcc -E hello.c -o hello.igcc -E star.c -o star.i# 2、编译# 设置参数-S表示进行编译# 设置参数-o指定要生成的文件# 设置参数-w忽略编译时的警告gcc -S hello.i -o hello.s -wgcc -S star.i -o star.s -w# 3、汇编# 设置参数-c表示进行汇编# 设置参数-o指定要生成的文件gcc -c hello.s -o hello.ogcc -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继续调试运行到下一个断点处

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。