免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2539 | 回复: 10
打印 上一主题 下一主题

高手请进,要做一个dump程序。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-18 13:39 |只看该作者 |倒序浏览
有很多的结构体,要把所有的结构体的内容都dump出来。

一个一个写,接近不可能,所以打算换个思路。

写一个能够自动展开的,然后用一个解析的函数,展开所有,
应该能够解决吧?

想法简单,能实现吗?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2004-05-18 13:43 |只看该作者

高手请进,要做一个dump程序。

唉,适合当老总,不适合当程序员。

浮躁。最好你动都不用动,就可以弄好。

论坛徽章:
0
3 [报告]
发表于 2004-05-18 13:43 |只看该作者

高手请进,要做一个dump程序。

如果不用辅助数据结构描述,不可能。
因为一个结构就是一块数据,谁在不知道结构的情况下都无从正确阅读其内容。

论坛徽章:
0
4 [报告]
发表于 2004-05-18 18:06 |只看该作者

高手请进,要做一个dump程序。

反对楼主这样提问题,让人模不着头脑,要从头做起,就象我提出“给我写个新的ftp服务器,要最高的安全性”那样,我会帮上什么忙吗?当然,本人水平有限,几乎不懂。你至少给个框架,给个程序,让别人给你修改一下才好阿。。。。你这样问问提是浪费你和大家的时间!!!

论坛徽章:
0
5 [报告]
发表于 2004-05-19 09:32 |只看该作者

高手请进,要做一个dump程序。

再回答你一遍,我真怀疑你是不是不看回帖。
如果不用辅助数据结构描述,不可能。
因为一个结构就是一块数据,谁在不知道结构的情况下都无从正确阅读其内容。

论坛徽章:
0
6 [报告]
发表于 2004-05-19 10:18 |只看该作者

高手请进,要做一个dump程序。

大致想法:
每个structure 可以生成一个Node,
所有node连接成一个AST tree,
写个遍历打印函数应该就可以了

论坛徽章:
0
7 [报告]
发表于 2004-05-19 12:09 |只看该作者

高手请进,要做一个dump程序。

原帖由 "hanli007" 发表:

……能够自动识别出结构,有个头指针就可以自动展开……

还是那句话:做不到。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2004-05-20 13:41 |只看该作者

高手请进,要做一个dump程序。

原帖由 "hanli007" 发表:
难,真难,想法简单,实现起来可真难。
见识高手了,谢谢bravoCN、FH。

其实也不难,但是关键你没有搞清楚 VC 的 Debug 和你做程序有什么区别。

1,如果一个程序想要 dump 出自己的所有结构,那么不可能。
2,如果你的程序监控了另外一个程序的运行,而且那个程序里边有“调试信息”,那么就很简单。找个 GDB 的源代码,看一下就知道了。

就像一个人,可以很清楚的看清另外一个人,却永远无法看清楚自己一样。

VC 的 Debug 之所以能够看清楚被运行的程序的结构,那是因为:
1,Debug 和被运行的程序不是同一个进程。
2,被运行的程序含有“调试信息”。
3,被运行的程序是在 Debug 的控制下,“单步执行”的。
luoting 该用户已被删除
9 [报告]
发表于 2004-05-20 14:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2004-05-20 14:59 |只看该作者

高手请进,要做一个dump程序。

原帖由 "hanli007" 发表:
算了,不和某些人讨论我是否浮躁的问题了。
这是我自己的问题。

现在正在做一个编译器,因为程序的规模很大,所以调试起来很麻烦。

所以要把运行过程中的数据内容dump到文件里,然后再windiff,找出差异。

..........


1。 既然你在写编译器,那么你肯定知道每个用户的结构体的内存分布情况。
你只要在每个用户定义的结构体之前加一个描述它的东西即可。
以下是一种可能的方法。

struct ColInfo
{
    char strColumnName[ 100];        // 结构体中每个变量名
    int  iOffset;                // 此变量距结构体头的offset
    int  iLength;                // 此变量的长度
};

struct UserStrureLayer
{
    char strUserStrureName[ 100];   // 用户的结构体的名字
    int iStrureItemNum;                    // 此结构体中变量数目       
    struct ColInfo *pa_stColInfo;   // 指向保存用户结构体具体信息的变长数组
};


struct UserStrureLayer ga_stUserStrureInfo[ 200];  // 全局保存用户结构的数组

2。
-------------------------------------------------
|  user strure name( writen by compiler         |  <------- 每一个用户结构体之前的小cookie
-------------------------------------------------
|  user defined strure layer                        |  <-------- 用户结构体
-------------------------------------------------



3。
倘若你没有编译器的帮助,那么这个要求是不能实现的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP