QT C++ C:\Windows\SYSTEM32\ntdll.dll错误异常

在Qt Creator4.0.3和QT5.6.3环境下开发的多线程数据库应用在客户工控机上出现不定时崩溃,表现为ntdll.dll错误。经过一系列排查,问题根源在于业务逻辑中一处不合理的数据库连接重置操作,导致在特定条件下的界面卡死。修复此逻辑错误后,问题得到解决。该问题在本地无法复现,可能与生产环境资源限制有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目用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条街,生产环境可能是在设备某一时刻处理能力较差时,触发到了这个荒谬的逻辑导致界面卡死崩溃,归根结底也是在业务逻辑中没有处理好操作顺序(实际是很小很短的一串代码,没有引起关注)。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值