注:前言、目录见 https://blog.csdn.net/qq_44220418/article/details/108428971
友情提醒:仅供参考理解,请勿直接复制粘贴
友情提醒:仅供参考理解,请勿直接复制粘贴
友情提醒:仅供参考理解,请勿直接复制粘贴
零、题目
一、使用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\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环境下
- 输入
l
或list
查看文件信息
- 输入
b 行号
设置断点
- 输入
info b
查看断点情况
- 输入
r
或run
开始调试程序(程序结束前只需要输入1次)
- 输入
p 变量名
查看相应变量
- 输入
n
进行单步调试(Step over,不进入函数体内)
- 输入
s
进行单步调试(Step into,进入函数体内)
- 输入
c
继续调试运行到下一个断点处