文档详情

gcc编译程序与gdb调试程序.doc

发布:2016-12-29约2.31千字共14页下载文档
文本预览下载声明
嵌入式原理与应用实验 实验五gcc编译程序与gdb调试程序 学号 姓名 班级 华侨大学电子工程系 实验五gcc编译程序与gdb调试程序 一、实验目的 通过几种不同需求的程序,掌握使用gcc的各种选项编译程序。 通过调试一个有问题的程序,使读者进一步熟练使用vi操作,而且熟练掌握gcc编译命令及gdb 的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。 二、实验内容:? 1、学习使用gcc的各种选项编译程序。 (1)编译和运行这段程序 hello.c: #include stdio.h int main(void) { printf (“Hello world!\n”); return 0; } (2)创建静态库,并运行程序 /* pow_test.c */ #include stdio.h #include stdlib.h int main(int argc, char *argv[]) { unsigned int x, y; unsigned long long res; if ((argc 3) || (sscanf(argv[1], %u, x) != 1) || (sscanf(argv[2], %u, y)) != 1) { printf(Usage: pow base exponent\n); exit(1); } res = unsgn_pow(x, y); printf(%u ^ %u = %u\n, x, y, res); exit(0); } /* unsgn_pow.c:库程序 */ unsigned long long unsgn_pow(unsigned int x, unsigned int y) { unsigned long long res = 1; if (y == 0) { res = 1; } else if (y == 1) { res = x; } else { res = x * unsgn_pow(x, y - 1); } return res; } 创建静态库,然后编译主程序,并运行结果。 (3)针对(2)的程序,创建动态库,然后编译主程序,并运行结果。对比两者的区别。 (4)对下面程序进行优化编译,对比优化前后的结果,并解释说明结果。 #include stdio.h int main(void) { double counter; double result; double temp; for (counter = 0; counter 2000.0 * 2000.0 * 2000.0 / 20.0 + 2020; counter += (5 - 1) / 4) { temp = counter / 1979; result = counter; } printf(“Result is %lf\\n”, result); return 0; } 2、用gdb调试程序的bug (1)使用vi 编辑器,将以下代码输入到名为greet.c 的文件中。此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出。代码如下所示: #include stdio.h int display1(char *string); int display2(char *string); int main () { char string[] = Embedded Linux; display1 (string); display2 (string); } int display1 (char *string) { printf (The original string is %s \n, string); } int display2 (char *string1) { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i size; i++) { string2[size - i
显示全部
相似文档