VC6写的MFC程序,随着"文档"的复杂化,反序列化时经常崩溃
一个10年的老程序了,MDI架构,用序列化方式存储。
代码里Serialize(CArchive& ar)有200多处。
经常有反序列化时崩溃的现象,调试发现常常是这样的错误:
ar >> n ;
for(int i = 0 ; i < n ; i++)
{
ar >> something;
}
n读到了一个不正常的超大值,造成下面循环读乱套。
=======================================
请教有何良方解决此弊病?
经常要在序列化里新加点东西,版本兼容倒是能解决,就是上述弊病不知道如何解决。
答案或建议:
很遗憾,据个人的痛苦经历,debug最快的办法就是慢下来,一点点的细节查进去~~~
象你这个问题,如果可以对CArchive 的 << 和 >> 重载,就可以很容易把数据大小和值的信息存入log。出错时就可以对着查,应该可以容易定位到出错的地方。类似于AOP编程,算是调试技巧。
文章来源:http://www.baikewenda.com/h/1101/a37079.html