07 2011 档案

抓虫记之八:每天崩溃的服务器
摘要:并不是所有的BUG,都会让你看到现象的。杀人案看到尸体,总还算有一个线索。如果最终就是消失了,那才难以发现。程序中有几类程序就是没有界面的。Window的Service,或者是自己做的应用程序服务器AppServer。有一个案例就和这个AppServer有关。原来,产品部门把系统部署给客户试用之后发现,服务器每隔两天就当机,重启之后,又好了。但两天后肯定出问题。项目组的人试了很多方法,都没有找出原因来。因为正常的客户端操作都是正常的。出错的时候,也没有甚么不正常的操作。这件事情困扰了项目组很长时间。以至于每个人都时时刻刻的关注着服务器的状态。想看看服务器到底甚么时候当掉的。一位同事就是这样坚持 阅读全文

posted @ 2011-07-16 20:48 ohmyjava 阅读(156) 评论(0) 推荐(0)

抓虫记之七:模拟鼠标移动就报错
摘要:有时候显示的BUG,你可能看不懂。有时候显示的BUG,你想不通。下面这个案例,当时遇到的时候就非常想不通。我们产品将于GTF(公司的自动化测试框架),做了自动化测试。测试人员发现,在模拟绘制模型的时候,鼠标一旦移动就报错。但是开发人员在实际复测的时候,怎么都复现不了。于是找到我来帮助诊断案例。因为GTF是我设计编写的。他们怀疑是不是GTF出问题了,导致这种奇怪的问题。我上次就说过这个问题了,人们在怀疑BUG出在哪里的时候,往往容易对自己不熟悉的领域进行怀疑。不过这个时候,不是我来争论这个道理的时候,诊断问题要紧。从案例的表象来看。如果GTF本身没有问题的话(我是坚信这点的),那么BUG肯定是因 阅读全文

posted @ 2011-07-16 20:47 ohmyjava 阅读(172) 评论(0) 推荐(0)

抓虫记之六:文件不能上传
摘要:有时候错不在你,但还是错了。所以还是错了!碰到今天这样的BUG,确实让人很烦恼。就是明明大家都在正常使用,突然有一个人告诉你,在他的机器上怎么都不行。那是一件很让人懊恼的事情。也就是说,他的机器上的某个环境肯定有问题。问题是,什么地方有问题呢?这次是在一个软件中,有一个上传附件的功能模块。服务器是一个HTTP服务器。客户端对文件进行断点上传。通过HTTPAnalyzer分析后发现。在这台PC上,一旦访问这个HTTP服务器就报inet.dll致命错。一开始怀疑是不是这个DLL出问题了,但是按照网上的方法尝试了之后,都没有用。最后在尝试的过程中,发现,只要吧服务器的地址,加到信任站点中,就不会报错 阅读全文

posted @ 2011-07-13 00:30 ohmyjava 阅读(116) 评论(0) 推荐(0)

抓虫记之五:Webservice总是调用不了
摘要:真相总是那么简单。但是背后却有很多深刻的道理。这一次的故事,原因很简单,但却很发人深省。这日,同事找到我,说他的一个WebService调用的时候老是报错。因为他知道我有很多经验,所以找到我帮忙调试。到了他机器面前,详细了解后,发现是这样的现象。他写了一个WebService,在本地调试的时候,都是成功的,但是一旦部署到服务器上后,就报错了。这个很简单,我就建议他把服务器的环境,配置到本地,再进行调试。他在进行这项操作的时候,就和我交流感想。他老怀疑他调用WebService的时候,是不是甚么地方写错了。是不是甚么地方没按照规范写,是不是甚么地方没到位。所以他在调试不成功之后,就一直怀疑是写法 阅读全文

posted @ 2011-07-10 15:27 ohmyjava 阅读(236) 评论(0) 推荐(0)

抓虫记之四:超时的真相
摘要:世界真奇妙,虫虫天天笑;若只看表象,保你没头脑!这次这个BUG,是帮助一位同事调试的。同事来找我,说他遇到一个问题,就是在本地调试的时候,都没问题,但是一部署到服务器上,就执行超时。经过我简单了解,原来这是这样的一个业务场景:客户希望在A系统中更新某记录的时候,同时更新B系统的一条数据。由于A系统是一个商业系统,没有源代码,而且界面的二次开发接口也没有,所以只能考虑对数据库字段增加Trigger,通过Trigger调用本地的一个EXE,去执行一个WebService,更新另外一个数据库数据。这个设计本身没有什么问题。可问题出在他的实现细节上。更新的过程,显然是要把A系统的数据传递给B系统,而不 阅读全文

posted @ 2011-07-09 19:18 ohmyjava 阅读(124) 评论(0) 推荐(0)

捉虫记之三:1+1 ≠ 2
摘要:虫虫的世界真的很奇妙。这几天闲来无聊,就把我调试过的BUG写出来,一来和大家分享一些故事,提供一些解决思路。二来也是想总结一下虫虫的一些规律,看看能否系统地进行调试。1+1 怎么会不等于2呢?这次遇到的问题就是这样,我在跟踪界面上一个错误。这个错误是这样发生的,当一个子窗体关闭的时候,原先的一个Grid中的数据就报错了。很奇怪吧。我采用了常规的调试方法,在报异常的地方设下断点,看看到底什么地方执行错了。可是已经入调试堆栈,就发现傻眼了,怎么明明是A结果的代码,变量查看器,却显示了另外一个结果。我说,完了,编译器出问题了。于是重启IDE。还是不行,再重启电脑。也不行!这怎么办呢?我告诉大家一个好 阅读全文

posted @ 2011-07-08 00:38 ohmyjava 阅读(121) 评论(0) 推荐(0)

抓虫记之二:WSDL中消失的函数定义
摘要:还是那句老话,现象总是扑朔迷离。这次的现象更加奇怪,在一个webservice的接口定义中,某个新定义的方法总是看不到。可是看了实现代码,确实已经公布了。这是为什么呢?先说明一下实现环境,这个是在Delphi环境下编写WebService的。大家可能说VisualStudio就不会有这样的问题了,这个我不否认,但是我相信了解这个过程,对大家会有很多帮助的。其实,不管哪种语言,WSDL的描述基本都是自动生成的,也不需要我们去做任何额外工作。但是,既然这里面出现了问题,就只能硬着头皮去了解这些内部实现了。在Delphi中,是在WebModule中的TWSDLHTMLPublish类型的组件来完成的 阅读全文

posted @ 2011-07-07 09:06 ohmyjava 阅读(183) 评论(0) 推荐(0)

抓虫记之一:DateToStr
摘要:又发生了这样的错误。表象总是那么扑朔迷离。有客户说文件上传服务不能用了。错误提示的是服务器错误。但是其他机器可以,说明服务本身并没有大问题,或者说错误的发生,源于客户端环境的不一样。得出结论并没有什么不妥。关键在于客户端什么环境有问题?这是一个非常有意思的过程。先简单说明一下,文件上传服务发布了一个地址 http://myServer/upload.aspx, 在Post的时候,将本地的文件数据提交上来即可。支持断点续传,所以每个文件都会产生一个唯一的ID。为了搞明白整个Post的过程中,哪里不一样,我们动用了利器HttpAnalysis。这个工具可以跟踪所有的Http请求过程。通过对比,发现 阅读全文

posted @ 2011-07-06 23:29 ohmyjava 阅读(192) 评论(0) 推荐(0)

导航