注:前言、目录见 /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 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环境下
输入l
或list
查看文件信息
输入b 行号
设置断点
输入info b
查看断点情况
输入r
或run
开始调试程序(程序结束前只需要输入1次)
输入p 变量名
查看相应变量
输入n
进行单步调试(Step over,不进入函数体内)
输入s
进行单步调试(Step into,进入函数体内)
输入c
继续调试运行到下一个断点处