一个小工具:DebugFile

  刚出道时候写了这样一个Bug:(这bug让我们赚了,两个多月没人抽到好东西~)

if ( pChar->m_info.nFateSystemSpend += rmb > LIMIT_RMB )
{
    pChar->m_info.SetPlayerFlag(Enum_CanGet, true);  
}

  作死的优先级问题

 

  这个功能测了两遍都没发现问题。第二次还是数值策划反馈:一个多月了没爆好产出,有些不正常,再测一遍……

  为什么一直没发现?

  由于“LIMIT_RMB”外网环境下非常大,QA要跑到很麻烦,所以内网测试时把这个值调小了,如此,只要单次消费值“rmb”够大,就能判断通过,然后表现正常

 

  其实这种代码,单步下傻逼都看得出来╮(╯_╰)╭但开发中,根本不知道那里会有问题,也不可能全单步一遍。就在想能否像单步那样捕获变量的状态,方便查错。

 

  ——记录变量旧值,在需要的时刻比对旧值、当前值,用于输出——

 

  想做这么个功能。那会碰巧啃完项目的bytebuffer实现(好奇bytebuffer怎么做到啥数据都能塞),便利用相同思想,实现了DebugFile的“捕获”功能,流式接口设计:

file << "a" << paramA << "f" << paramF << "d" << paramD << "s" << paramS;

  内部通过c艹淫荡的模板、函数重载决议,获知输入变量的类型,记录地址,并将旧值拷贝至buffer中。待到DebugFile析构,根据类型,从记录地址中获取变量的当前值,比对buffer中分析出的旧值,按配置写Log。输出可以支持:按函数、功能块、消息等分目录分文件。

  预先绑定要关心的变量,黑盒跑完功能后,查看相应Log即可获知:某函数、某消息...处理过后,绑定变量的异动情况。

  用宏包装下,仅于Debug生效即可。

 

  源码:https://github.com/3workman/Tools/blob/master/tool/DebugFile.h

 

posted @ 2016-08-10 17:51  *蚂蚁*  阅读(488)  评论(3编辑  收藏  举报