软件问题分析报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题分析报告
问题一:总台业务软件启动时出现kernelBase.dll错误问题
1、抓图
2、测试条件、方法及结果
1)测试一(win10企业环境测试)
条件:取消软件兼容模式
方法:经过多次运行关闭程序
结果:4次中就会出现一次该问题
2)测试二(win10企业环境测试)
条件:启动软件兼容模式
方法:经过多次运行关闭程序
结果:运行十几次也不见得会出现一次该问题
3)测试三(win10企业环境测试)
条件:关闭软件兼容模式且源码的工程文件中注释掉剪贴板代码
方法:经过多次运行关闭程序
结果:没有发现一次该问题。另外发现软件的启动前不用等待操作系统兼容某个操作系统所浪费的时间。
4)测试四(WINDOW Server 2008 R2企业版)
条件:关闭兼容模式
方法:多次运行
结果:一切正常
5)测试五(WINDOW Server 2008 R2企业版)
条件:打开兼容模式(win95,win98)
方法:运行一次
结果:每运行一次都会提示没有版本信息等提示。
6)测试六(WINDOW Server 2008 R2企业版)
条件:打开兼容模式(NT4.0 sp5及高版本)
方法:多次运行
结果:正常
7)测试七(WINDOW Server 2008 R2企业版)
条件:打开、关闭兼容模式
方法:同时打开软件两次
结果:不管是打开或是关闭模式,必定会引起剪贴板错误(kernelBase.dll问题)
8)测试八(WIN10企业版)
条件:打开、关闭兼容模式
方法:同时打开软件两次
结果:不管是打开或是关闭模式,必定会引起剪贴板错误(kernelBase.dll问题)
3、问题根源
1)问题出现在工程文件中使用的剪贴板功能处
2)兼容性变化的原因
1>文件兼容性的存储方式是以文字名为唯一的,所以在该文件改名后兼容性就会被重置为取消状态。
2>生成是设置为了兼容模式,发给客户就没有兼容属性,是因为客户电脑上从未设置过该属性,而文件被COPY过来后会重置,默认为取消兼容模式。
3)不管是否开启兼容模式,只要在很短的时间打开两次程序,则会报剪贴板错误继而引起kernelBase.dll问题。
4、解决方法
1)在实施工程师将程序给客户或部署到主机上时,明文规定必须将程序设置为兼容模式或告诉客户启动兼容模式。
2)可以去掉工程中的剪贴板功能,这样可以同时启动两个程序进程。
3)在工程文件中引用互斥变量,同一时间只能有开一个程序进程运行。
5、建议
1)由于未经过大量的非兼容测试,担心其它功能受到影响,所以建议使用第一种解决方法(启动兼容模式)
2)源码调试时该问题是易出现的,建议开发工程师在编译生成后取消掉兼容模式,在此模式下编译生成后用生成后的执行程序调试。
3)源码调试时去掉被忽略的EXCEPTION选项,这样才可以尽可能多的抓到异常问题。
建议采用第3个解决办法:
在工程文件中引用互斥变量,同一时间只能有开一个程序进程运行。
问题二:StandardDaemon200.dll动态库有内存溢出的问题(已与李明彩沟通,待其解决)
1、抓图
2、问题分析
原来的代码会多次调用StandardDaemon_Init,但没有StandardDaemon_CleanUp释放掉全局变量aqPeis,所以会产生内存泄露。
3、问题根源
在总台业务程序中GetFunctionValFromHerSetting函数每次调用都会执行StandardDaemon_Ini调用,但没有调用StandardDaemon_CleanUp释放。
4、解决方法
方法1:全局变量aqPeis在创建前,可以先用freeandnil先释放。
方法2:在每次调用StandardDaemon_Init时,最后一定要用
StandardDaemon_CleanUp释放。
5、建议
两种方法都可以根除。
问题三:用户登录时多次执行select * from HerPermission
1、抓图
2、问题分析
在ReadInPermsOfUser过程中会多次调用AddFatherIdsOf这个功能,AddFatherIdsOf功能会调用RefreshDataset(dataset);来重新查表。
3、问题根源
RefreshDataset(dataset)是刷新记录集的功能,也是重新打开表的功能,所以调用多少次RefreshDataset就会查询多少次表,这个参数根据ListBoxPerms.Items.Count来决定查多少次表。
4、解决方法
建立全局表,只第一次加载,后续查缓存中的记录表。
5、建议
多次查表会严重影响程序执行效率,建议使用上面的解决方法解决。
问题四
赵建
2017年1月17日