真正的程序员,敢于面对自己的BUGs!!
这话说的多么地’正气凛然‘啊。。。实际上应该是’自作孽,不可活‘啊。。。找了一晚,终于发现
昨天提到的’删除单词Bug‘实际应该是’添加单词Bug':当添加新单词,并开启词典分析选项时,LingosHook会过滤掉已经存在的单词,以防止重复记录;设计的多好,但问题是,如果单词重复,相应的HTML数据也不应该保存啊。。。这个忘记写了。。。如下代码:
1 int CDictObject::SaveResult(const std::wstring& html, TResultMap& result)
2 {
3 if(FilterResult(result) != 0)
4 return -1;
5 if(result.size() == 0)
6 return 0;
7 int srcid = -1;
8 if(SaveSrcData(html, srcid) != 0)
9 return -1;
10 if(SaveResult(srcid, result) != 0)
11 {
12 RemoveSrcData(srcid);
13 return -1;
14 }
15 return 0;
16 }
是的,红色部分忘记了。。。
目前看,这个Bug在很早就应该存在了,大约都可以追溯到1.2.001!当同一个单词被多次查询时,Bug会导致LingosHook存入一条完全没用的HTML数据到SrcDataTable表中。唉,LingosHook长期以来一直在致力于减少数据的存储,没想这一个Bug。。。唉,丢脸了。。。
做错事,是要付出代价的!为了修正Bug导致的错误存储,昨晚决定为此专门写个插件--Data Clean-up!
Data Clean-up插件能够备份和自动清理无用数据。整整3个小时,每分钟不少于敲打120个字母的速度下,终于搞定了。。。使用方法如下:
1. 备份:为了防止可能的错误,建议备份原有数据文件;使用插件,点击‘Backup’即可。插件自动备份LingosHook.db3文件到以当前日期为后缀的新的db3文件中,如下图所示。
2. 清理:插件自动查找并清理无用数据,点击‘Clean-up'即可,如下图所示:
看看,超过一半以上的无用记录,多么可怕的Bug啊。。。从理论上来说,无用记录范围会在0到无穷大间。。。(有本书叫做《从零到无穷大》很好看。。。)
到此,Bug修正并实现清除方法,可以瞑目了。。。插件随下个LingosHook版本一起发布,不好意思了。。。
突然发现,今晚要是能处理完FonDonator插件,再加班加点测试下,也许没准还真能赶上过个六一呢。。。哇哈哈。。。