免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hongyunqi
打印 上一主题 下一主题

自动打印struct中的内容 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
51 [报告]
发表于 2010-09-04 17:40 |只看该作者
什么叫全世界的?我们每开发一个应用就面对数百个各种不同的结构,当然要寻找一种通用的方法啦!
yulihua49 发表于 2010-09-04 17:36

数百个又不是数百种。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
52 [报告]
发表于 2010-09-04 20:37 |只看该作者
数百个又不是数百种。
flw 发表于 2010-09-04 17:40



    数百个就是是数百种,也许不止。思想如此狭隘。。。。无语。

论坛徽章:
0
53 [报告]
发表于 2010-09-04 21:36 |只看该作者

我 睡觉。。。

论坛徽章:
0
54 [报告]
发表于 2010-09-04 21:37 |只看该作者
可以写一个shell printStruct.sh,不用修改原C文件, 用法如下(也算元编程吧):
如执行文件为printStruct.o , 要打印变量family:
simon@lionteeth:~/test$ ./printStruct.sh printStruct.o family

Output如下:
  $1 = {
  leader = {
    name = "Maggie\000\000\000",
    age = 18,
    married = 0
  },
  worker = {
    name = "Simon\000\000\000\000",
    age = 99,
    married = 1
  }
}

源码如下:
simon@lionteeth:~/test$ cat printStruct.c
typedef struct {
        char name[10];
        int  age;
        int married;
} Person;

typedef struct {
        Person leader;
        Person worker;
} Team;


Team family = {
        .leader = {
            .name = "Maggie",
            .age = 18,
            .married = 0
        },

        .worker = {
            .name = "Simon",
            .age = 99,
            .married = 1
        }
};


int main(void* argv[], int argc)
{
        return 0;
}
simon@lionteeth:~/test$ gcc -g printStruct.c -o printStruct.o
simon@lionteeth:~/test$ cat printStruct.sh
#/bin/bash
echo "set print pretty on" > gdb.in
echo "p $2" >> gdb.in
echo "quit" >> gdb.in
gdb $1 < gdb.in > gdb.out
nawk '
        /\$1 =/  { process = 1; print $0; next }
        process == 0 { next }
        {
           print $0
        }
   ' gdb.out|sed 's/(gdb)//g'
simon@lionteeth:~/test$ ./printStruct.sh printStruct.o family
  $1 = {
  leader = {
    name = "Maggie\000\000\000",
    age = 18,
    married = 0
  },
  worker = {
    name = "Simon\000\000\000\000",
    age = 99,
    married = 1
  }
}

论坛徽章:
0
55 [报告]
发表于 2010-09-04 21:51 |只看该作者
玩java 去吧,java 可以搞

论坛徽章:
0
56 [报告]
发表于 2010-09-04 23:19 |只看该作者
回复 54# crazychinaunix


    我们需要的是运行时输出,不是编译输出

论坛徽章:
0
57 [报告]
发表于 2010-09-05 10:00 |只看该作者
这个要学习~

论坛徽章:
0
58 [报告]
发表于 2010-09-05 12:06 |只看该作者

论坛徽章:
0
59 [报告]
发表于 2010-09-05 12:09 |只看该作者
积分低 看不到啊  悲剧
求共享  让我等都学习膜拜一下

论坛徽章:
0
60 [报告]
发表于 2010-09-05 23:44 |只看该作者
学习学习。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP