接口调试的一个bug的解决
来源:互联网 发布:跟团游哪个网站好 知乎 编辑:程序博客网 时间:2024/05/19 08:46
公司让我调试CRM的开户接口,具体来说,是在平台组成相应的参数,通过将平台的数据包转换成CRM能够识别的包格式,最后再通过一个独立的socket模块将CRM包传送出去。ps:socket模块位于平台和CRM之间,与平台及CRM均通过socket建立连接。
说老实话,代码并不难,无非就是组包,解包,写数据库之类的操作。
难就难在数据库配置这块上面!
当我按照协议要求,将平台转CRM包在数据库配置后,socket模块总是报异常。。
仔细检查了数据库的配置,好像配置是正确的,跟踪打印信息,数据包确认已经送达了socket模块。
提示线程出错。
反复折腾了好几天,由于又要接手新的项目,所以我始终没有认真去想为什么会报异常。
今天再摸了一下,我减少了一些数据库的配置,奇怪,可以了,恢复到原样,又报这个异常。
这一下我理解了,肯定是socket模块的接收缓冲区溢出。
由于socket模块已经是别人写的代码,我拿过来看了一下,发现socket模块是采用多线程方式,每接收到一个新的连接,就开辟一个新的线程负责处理这个连接请求,而这个线程开辟的接受缓冲区只有10000个字节,不足以容纳我发送的数据,导致缓冲区溢出。
将缓冲区扩大一下,正常。。
想起了我以前也碰到了一个这样的问题。。
经验:
在这种情况下,我确信数据已经发送到了socket模块,那么此时出错只有两种情况:1、数据库的配置出错 2、socket模块接收有问题。
首先先找自身问题:1、仔细查找数据库的配置情况 。 2、在手工基本上无法找出原因后,缩小范围,具体来说是将一些配置置为无效,查找是否还会出现异常。反复操作,基本上可以定位出错位置 3、如果仍然无法定位,可以查找是否是因为一些空格符,回车符的原因。 4、最后在排除所有的配置出错情况后,就要怀疑是对方模块出现了问题,导致接收异常。
在和别人联调时,不要出现问题首先认为是对方的问题,出现问题时,应该仔细想想自己有可能有哪些问题,应该多和对方沟通,共同分析出错误的原因。
- 接口调试的一个bug的解决
- 解决h264bitstream的一个bug
- 一个奇葩bug的解决
- 关于一个bug的解决
- FlowingDrawer 一个bug的解决
- NGUI的一个bug解决
- 一个bug的解决过程
- 一个古怪的bug调试过程
- 注重细节,一个小bug的调试
- 解决一个只在调试运行状态下才出现的bug
- 解决了一个困惑很久的bug
- 解决打印代码的一个Bug
- ubuntu-10.10一个BUG的解决
- 解决 visualmark.vim 碰到的一个BUG
- 解决打印代码的一个Bug
- 一个小BUG的解决过程。
- 一个长时间parse的bug解决过程
- resin启动一个bug的解决
- android 资源应用的?和@符号解析
- 系统托盘
- 三个已排序的数组a,b,c,求i,j,k使a[i]=b[j]=c[k]
- 判断一个数是不是素数
- 杭电 3835 R(N)
- 接口调试的一个bug的解决
- String的获取
- VS 2008 AJAX Extensions不能用,变为灰色-解决方案
- 初识 Service(三) 演示:Service给 Activity传递消息
- 添加HLSL每像素光照
- Android 笔记:Maps, Geocoding, and LBS
- 用rz,sz命令在xshell传输文件
- XNA Shader 逐顶点和逐像素光照
- 利用预渲染加速iOS设备的图像显示