在用Qt6.7.2开发蓝牙应用的时候,发现部分Win10系统运行软件闪退的问题。进行Debug调试发现软件访问了空指针导致崩溃。
进一步调试发现软件在调用下面一段代码导致崩溃:
localDevice = new QBluetoothLocalDevice(this);
if (localDevice)
{
if (localDevice->isValid())
{
connect(localDevice, &QBluetoothLocalDevice::deviceConnected, this, &DongleManger::onLocalHostDeviceConnected);
localDevice->powerOn();
/* 发现与本机配对的鼠标设备 */
bluetoothAgent = new QBluetoothDeviceDiscoveryAgent(this);
if(bluetoothAgent)
{
connect(bluetoothAgent, &QBluetoothDeviceDiscoveryAgent::deviceDiscovered, this, &DongleManger::onDeviceDiscovered);
connect(bluetoothAgent, &QBluetoothDeviceDiscoveryAgent::errorOccurred, this, &DongleManger::onErrorOccurred);
/* 设置发现超时时间 */
bluetoothAgent->setLowEnergyDiscoveryTimeout(3000);
/* 开始发现设备 */
bluetoothAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);
}
}
}
最终定位是bluetoothAgent->start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod);这一行导致的崩溃。但是这段代码跟qt官方给出的demo是一样的实现逻辑,进一步测试qt官方Demo发现在同一台电脑上有相同的问题,软件崩溃点都是qbluetoothserviceinfo::unregisterservice。
最终发现无法再Qt6.7.2版本上解决该问题,版本降低到Qt6.4.0时发现没有该问题。
1315






