赞
踩
项目用Qt Creator 4.0.3+QT 5.6.3 MINGW windows下编写。
项目中使用多线程操作SqlServer数据库,编写完毕后本地测试验证无异常,发给客户使用。
客户处有多台工控机运行本软件,但是其中一台不定时的出现C:\Windows\SYSTEM32\ntdll.dll错误,表现就是运行过程中突然界面卡死,然后白屏崩溃。
研发本地进行多天的操作复现,没有复现出问题。
1、排查是否是ntdll库版本等问题(×)
2、排查是不是ntdll需要重新注册(×)
3、排查是否是ntdll关联库出现问题(×)
4、排查是否ntdll某些服务被杀毒软件杀掉(×)
5、排查是否是网络不稳定,导致使用的数据库连接出现问题(×)
6、排查是否是多台设备同时操作数据库出现问题(×)
7、排查是否存在数据越界、野指针等问题,拍完后无发现(×)
8、然后用heob排查是否是内存泄漏,排完也没出现内存泄漏问题(×)
就差管微软要ntdll源码来定位了!!!!!
最最最最后梳理数据库操作逻辑,发现有一处在批量修改数据库参数时,某一特定情况下会去重置数据库连接状态,正在操作中突然进行断开重连,有可能导致出现ntdll.dll异常,由于是业务逻辑导致的数据库操作问题,捕获的异常信息就是ntdll操作(理想状态是能定位到代码块,然而现实是抛出的库错误)(√)。
解决方案:修改这个不符合逻辑的操作,解决问题。
结论:
这个ntdll问题,在我本地完全没有复现出来,结合本地环境和生产环境,本地的设备配置甩生产环境N条街,生产环境可能是在设备某一时刻处理能力较差时,触发到了这个荒谬的逻辑导致界面卡死崩溃,归根结底也是在业务逻辑中没有处理好操作顺序(实际是很小很短的一串代码,没有引起关注)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。