Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285954
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 21
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-20 14:44
文章分类

全部博文(124)

文章存档

2020年(1)

2018年(2)

2016年(2)

2015年(6)

2014年(10)

2013年(23)

2012年(7)

2011年(18)

2010年(15)

2009年(8)

2007年(8)

2006年(23)

2005年(1)

我的朋友

分类: LINUX

2006-07-15 10:28:04

1.用脚本打印链表:
#include
struct A
{
    int age;
    char name[10];
    struct A *next;
};

int main ()
{
    char *names[10] = { "jack", "helen", "tom", "april", "xl", "wjm" };
    struct A a[6];
    int i = 0;
    while (i < 6)
    {
        a[i].next = a + i + 1;
        strcpy (a[i].name, names[i]);
        a[i].age = i * 2;
        i++;
    }
    a[i - 1].next = 0;
    i = 10;
}

gdb中的方法如下:
直接在gdb状态下输入命令(也可以把命令写在一个文件中,到时用source加载运行,可以认为一个文件就是一个无参数的函数)
(gdb) set $p=a
(gdb) while $p!=0
 >print $p->name
 >echo $p->name
 >print (char*)$p->name
 >set $p=$p->next
 >end
也可以使用用户自定义函数完成
define abc
  set $p=a
  while $p!=0
    print $p->name
    echo $p->name
    print (char*)$p->name
    set $p=$p->next
  end
end
dbx中的调试脚本为:
1.可以像上面一样直接输入脚本.(包括函数体或者函数的全部内容)。
2.在一个临时文件中输入脚本.然后用. 或者source加载。
function a
{
  p=$[&a];
  while (($p != 0));
  do
    print $p;
    echo $p;
    print $[((struct A *) $p)->name];
    echo $[((struct A *) $p)->name];
    p=$[((struct A *) $p)->next];
  done;
}
. 和source的区别是.使用的$PATH中查找文件。source在当前目录中查找,或者写全路径。如果代码分行写,可以不使用分号。如果全部写在一行,则必须加上分号。
$[]中的内容直接是c语言代码。 p=$[&a];表示获得a的地址,并保存在shell变量p中。
$p表示获得shell变量p的值,由于p不是c程序的部分,所以需要对其进行强行转化。

注意:
同样为while在gdb和dbx中却有不同:
(gdb) help while
Execute nested commands WHILE the conditional expression is non zero.The conditional expression must follow the word `while' and must in turn be followed by a new line.  The nested commands must be entered one per line,and should be terminated by the word `end'.

(dbx 1) help while
while is a shell keyword

因此上面的语法不同,也就不足为怪了。





阅读(1960) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~