make和gdb的简单应用
2015-10-14 16:36
351 查看
题目:
A、以下是本次实验的内容一:①实例文件有六个源文件 和六个头文件 分别是:func1.c func2.c func3.c func4.c func5.c main.c head1.h head2.h head3.h head4.h head5.h head.h
②编写Makefile文件,要求实现:执行make时,能对源代码进行编译、链接,生成可执行文件main.exe;执行make clean时,能清除之前编译生成的所有中间文件和可执行文件,仅保留源文件;执行makeinstall时,能在当前目录创建一个子目录bin,并且把可执行文件main.exe移动bin子目录。
解答:
可以通过 gcc -MM *.c >> makefile 得到各个文件的依赖关系。注意:每条gcc命令 前面是一个 tab键
第一个实验通过gcc-MM func1.c >> makefile ,再通过修改makefile文件完成 在终端输入make后自动执行编译链接生成可以执行那个文件。make clean 会根据题目要求自动删除所有.o文件和可执行文件。makeinstall 会执行 mkdir bin 以及 mv main.exe ./bin/main.exe两条指令完成
makefile 文件内容:
main.exe: main.o func1.o func2.o func3.o func4.o func5.o gcc -o main.exe *.o func1.o: func1.c head.h head1.h gcc -c func1.c func2.o: func2.c head.h head2.h gcc -c func2.c func3.o: func3.c head.h head3.h gcc -c func3.c func4.o: func4.c head.h head4.h gcc -c func4.c func5.o: func5.c head.h head5.h gcc -c func5.c main.o: main.c head.h gcc -c main.c clean: -rm *.o main.exe install: -mkdir bin -mv main.exe ./bin/main.exe
问题:
B、以下是本次实验的内容二,下面这段代码有错误,请用gdb调试,写出调试过程并修正程序。这个程序被称为 greeting,它显示一个简单的问候, 再用反序将它列出。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char my_string[] = "hellothere";
my_print (my_string);
my_print2 (my_string);
exit (0);
}
void my_print (char *string)
{
printf ("The string is%s\n", string);
}
void my_print2 (char *string)
{
char *string2;
int size, i;
size = strlen (string);
string2 = (char *) malloc (size +1);
for (i =0; i < size; i++)
string2[size - i] = string[i];
string2[size+1] = '\0';
printf ("The string printedbackward is %s\n", string2);
}
解答:
最终正确输出The string ishello there
The string printedbackward is ereht olleh
错误修改如下:
for (i = 0; i <size; i++)
string2[size - i] = string[i];
改为:
for (i = 0; i <size; i++)
string2[size - i-1] = string[i];
print size 得到原来的字符串长度为11,dispaly
*string2@11 用来跟踪字符串的变化,通过产看最后结果,可以发现string2的首字符始终为0,因此发现问题。
利用 run 、 next 以及display 可以查看到数组随着程序执行的变化,发现最终结果字符串string2 的整体刚好后移了1位。
相关文章推荐
- 如何修改Tomcat服务器Server Locations .
- Android Studio生成Jni头文件的方法
- 面向对象-------虚函数学习
- mysql cmake参数详解
- Android自定义View系列之可伸缩的TextView
- [leetcode]Decode Ways
- LevelDB 读取记录
- delphi 手机振动 IOS Android
- Win7系统桌面图标显示异常统一变成白色的两种解决方法
- 遭遇oracle表空文件大小限制
- android获取SDCard中照片并按照时间顺序显示
- 揭开Android神秘面纱之Activity
- Android之TelephonyManager
- 切换分支
- 使用反射让Spinner选择同一选项时触发onItemSelected事件
- 【cocos2d-js官方文档】一、搭建 Cocos2d-JS 开发环境
- 编程语言汇总
- UITextView 追加文字自动跳到顶部解决方法
- 前端开发工具集-----项目开发AngularJS篇
- Blcok的那些事