LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 877|回复: 3

来试试看 gdb 排错。

[复制链接]
发表于 2003-9-3 20:07:35 | 显示全部楼层 |阅读模式
下面是摘自 Linux 程序设计(第2版) 里的一个例子,程序写的很糟糕,大致是用冒泡法排序,即没有注释,而且还有错误,作者通过这个例题讲解了如何使用 gdb 排错。
我把它拿出来,大伙也试试看,眼力好的,一眼就能看出来,看不出来不妨让 gdb 帮忙。

  1. #include <stdio.h>

  2. typedef struct {
  3.         char *data;
  4.         int key;
  5. } item;

  6. item array[] = {
  7.         {"bill", 3},
  8.         {"neil", 4},
  9.         {"john", 2},
  10.         {"rick", 5},
  11.         {"alex", 1},
  12. };

  13. sort(item *a, int n)
  14. {
  15.         int i = 0, j = 0;
  16.         int s = 1;
  17.        
  18.         for(; i < n && s != 0; i++) {
  19.                 s = 0;
  20.                 for(j = 0; j < n; j++) {
  21.                         if(a[j].key = a[j+1].key) {
  22.                                 item t = a[j];
  23.                                 a[j] = a[j+1];
  24.                                 a[j+1] = t;
  25.                                 s++;
  26.                         }
  27.                 }
  28.                 n--;
  29.         }
  30. }

  31. main()
  32. {
  33.         sort(array, 5);
  34. }
复制代码
发表于 2003-9-7 03:40:45 | 显示全部楼层
(a[j].key = a[j+1].key
这里使用 =
不懂
发表于 2003-9-9 23:08:54 | 显示全部楼层

回复: 来试试看 gdb 排错。

最初由 quanliking 发表
下面是摘自 Linux 程序设计(第2版) 里的一个例子,程序写的很糟糕,大致是用冒泡法排序,即没有注释,而且还有错误,作者通过这个例题讲解了如何使用 gdb 排错。
我把它拿出来,大伙也试试看,眼力好的,一眼就能看出来,看不出来不妨让 gdb 帮忙。

  1. #include <stdio.h>

  2. typedef struct {
  3.         char *data;
  4.         int key;
  5. } item;

  6. item array[] = {
  7.         {"bill", 3},
  8.         {"neil", 4},
  9.         {"john", 2},
  10.         {"rick", 5},
  11.         {"alex", 1},
  12. };

  13. sort(item *a, int n)
  14. {
  15.         int i = 0, j = 0;
  16.         int s = 1;
  17.        
  18.         for(; i < n && s != 0; i++) {
  19.                 s = 0;
  20.                 for(j = 0; j < n; j++) {
  21.                         if(a[j].key = a[j+1].key) {
  22.                                 item t = a[j];
  23.                                 a[j] = a[j+1];
  24.                                 a[j+1] = t;
  25.                                 s++;
  26.                         }
  27.                 }
  28.                 n--;
  29.         }
  30. }

  31. main()
  32. {
  33.         sort(array, 5);
  34. }
复制代码


除非是隐藏很深的BUG,高手很少动用GDB的,呵呵。
只要看两眼,就知道错在什么地方了。这样的人我就遇到过,可惜我还没有达到那个境界,正在努力中............
 楼主| 发表于 2003-9-9 23:36:35 | 显示全部楼层
哈,对于我这样的新手,gdb 很不错呀!
上面的例子个人觉得挺好,不是考验个人能力,而是助于 gdb 入门,书上的那段演示其实很精彩,可惜太长,不然就把它放上来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表