1 缘起
1.1 我的一个出错程序
程序名称:呼叫处理模块的压力测试工具,分为客户端和服务端。
开发工具:delhpi 5
相关技术:客户端通过与服务端建立socket连接来模拟一组电话机的拨入、按键、等待、挂机等过程。服务端对socket事件以及收到的数据包进行预处理,并转化为抽象的呼叫模型数据,然后发送给更上层的呼叫处理模块。由于呼叫处理模块是硬件无关的(与语音板卡、交换机类型均无关),因此通过此压力测试工具可以比较真实地模拟海量呼叫,以达到测试呼叫处理模块程序的逻辑正确性及其性能的目的。
由于系统设计时的某些考虑,该测试工具被分作客户端和服务端两个程序来实现,且采用socket进行通讯。现在想来,其实不如整合成一个程序实现更为简单——但也正因为采用两个程序来实现,才引发了后面的一些问题,并由此引入了简单的垃圾回收框架。
1.2 问题
在测试工具的使用过程中,我们发现当呼叫量巨大,且测试工具动作频繁的情况下,系统出现以下错误:
访问地址错(eaccessviolation),代码地址位于$0046fc80附近,访问地址多为$00000028。
出现einvalidcast错误,该错误表明对一个地址进行类类型转换时出错(采用as关键字)。
程序内多处断言失败,出现许多引用已销毁对象的情况。
仔细检查程序后,我仍然认为这一切简直是不可思议!而且,本来用于对别的程序进行测试的程序自身却出现这类问题,几乎让我无地自容!
为了挽回自己的声誉,我不得不成沉住气来仔细跟踪错误,排解问题!
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器