您的位置:首页 > 其它

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位。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: