业受开发问题共享

问题:
斗战神(DZS)半自助工具中跑到数据层接口ID:30875就报错,返回-20009,经查询错误码,得出参数不存在。只能去看日志了…
code src:
业受开发问题共享_第1张图片
查看日志:DbManager.log,有部分相关参数,但有这么一句:QueryId[30875]|Result:errCode[-20009],size:[0],desc:[参数[uin]不存在.]
显然,QQ号没有传过去,继续检查QQ号是否获取到~
业受开发问题共享_第2张图片
查看日志:QhelperRuleValid.log,有QQ的存在且为正确…
这里写图片描述
奇怪,那就检查下数据层接口是否有问题呗,把参数直接填进去,正常…~
传进去前的参数正常,数据层接口正常,为何到了数据层那里就少了QQ号呢(PS:其实还少了subject和text值,我一时没注意到,被DMLOG误导了)很奇怪,有木有,东想想西想想,这个测试下,那个调下,连数据层输入参数的位置都调了下,还是不行,想不通了,找其栋(v_qdpeng)童鞋帮忙看下,还是无解~
只能找我的后盾峰哥(windhe)寻求帮助了。。。(PS:每次看到他都好忙碌的样子,真心不想给他找事儿~)
根据聊天记录,整理其定位步骤:
1.检查vArmBlob字段(PS:之前我也有过由于Blob字段有特殊符号导致接口返回错误)
2.只能说很细心,发现不仅少了uin,还少了text等参数
3.通过GDB调试,会发现在GetFunction函数中会有对参数inParams的处理
业受开发问题共享_第3张图片
4.在源码中进行代码添加,多打日志,如下图:
业受开发问题共享_第4张图片
查看日志并分析得出结论:cpp文件本身是gbk的,函数Utf8ToGbk处有问题。
能定位到问题就好解决了:把中文转成GBK存放就可以了
theParamIn1[“subject”] = GbkToUtf8(“系统邮件”);
theParamIn1[“text”] = GbkToUtf8(“系统发放”);

后感:
1.看代码和日志要细心,注意隐藏问题
2.调试过程中打日志,GDB得双管齐下(PS:来到这里后,GDB就很少用了,以后注意~)
3.涉及到编码格式,第一查看文件的格式,然后看需要的格式。若在不正确的地方转码,有可能导致问题发生。
4.发生问题后,得耐心地去查看并一个一个地排查,直至解决问题,年轻人细心和耐心很重要~

你可能感兴趣的:(业受开发问题共享)