设为首页 加入收藏

TOP

Linux 下 C 语言编程(三)
2012-08-26 13:52:23 来源: 作者: 【 】 浏览:3274
Tags:Linux 语言编程
he string printed backward is ereht olleh
    由于某些原因, my_print2 函数没有正常工作. 让我们用  gdb 看看问题究竟出在哪儿, 先键入如下命令: 
 gdb greeting
注意: 记得在编译 greeting 程序时把调试选项打开. 
    如果你在输入命令时忘了把要调试的程序作为参数传给 gdb , 你可以在 gdb 提示符下用 file 命令来载入它: 
 (gdb) file greeting    这个命令将载入 greeting 可执行文件就象你在 gdb 命令行里装入它一样.

    这时你能用 gdb

 的 run 命令来运行 greeting 了. 当它在 gdb 里被运行后结果大约会象这样:(gdb) run Starting program: /root/greeting The string is hello there The string printed backward is Program exited with code 041    这个输出和在 gdb 外面运行的结果一样. 问题是, 为什么反序打印没有工作 为了找出症结所在, 我们可以在 my_print2 函数的 for 语句后设一个断点, 具体的做法是在 gdb 提示符下键入 list 命令三次, 列出源代码:(gdb) list (gdb) list (gdb) list
技巧:  在 gdb 提示符下按回车健将重复上一个命令. 
    第一次键入 list 命令的输出如下: 
 1       #include  <stdio.h> 2 3       main () 4       { 5         char my_string[] = "hello there"; 6 7         my_print (my_string); 8         my_print2 (my_string); 9       } 10    如果按下回车, gdb 将再执行一次 list 命令, 给出下列输出: 
 11      my_print (char *string) 12      { 13        printf ("The string is %s\n", string); 14      } 15 16      my_print2 (char *string) 17      { 18        char *string2; 19        int size, i; 20    再按一次回车将列出 greeting 程序的剩余部分:21        size = strlen (string); 22        string2 = (char *) malloc (size + 1); 23        for (i = 0; i < size; i++) 24          string2[size - i] = string[i]; 25        string2[size+1] = `\0'; 26        printf ("The string printed backward is %s\n", string2); 27      }    根据列出的源程序, 你能看到要设断点的地方在第24行, 在 gdb 命令行提示符下键入如下命令设置断点:(gdb) break 24    gdb 将作出如下的响应:Breakpoint 1 at 0x139: file greeting.c, line 24 (gdb)  
    现在再键入 run 命令, 将产生如下的输出: 
 Starting program: /root/greeting The string is hello there Breakpoint 1, my_print2 (string = 0xbfffdc4 "hello there") at greeting.c :24 24  string2[size-i]=string[i]    你能通过设置一个观察 string2[size - i] 变量的值的观察点来看出错误是怎样产生的, 做法是键入: 
 (gdb) watch string2
首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C 與 Prolog 之比較 下一篇C语言–栈要点总结,顺序栈的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: