从你提供的代码和日志来看,问题出在没有后续日志被打印,这可能说明代码执行到了某个地方,但没有继续下去。根据你的日志输出,可以做以下分析:
锁定逻辑:程序首先进入
std::lock_guard<std::mutex> taskLock(m_RecordTaskNodeLock);
的作用域。如果此处的锁未能成功获取(如死锁情况),后面的日志将不会被打印。查找记录节点:在这一行:
auto RecordTaskIt = m_RecordTaskNodes.find(deviceId);
如果未能找到对应的
deviceId
,则会进入第一个错误处理部分,并返回-404
和相应的信息。这部分应该有打印日志“2222222222222222222222222”。因此,如果你只看到了“11111111111111111111111111”,而没有看到其他任何信息,意味着这段代码尚未执行到这个查找。分支逻辑:如果该设备 ID 确实存在,那么接下来会执行另一个锁定:
std::lock_guard<std::mutex> clusterLock(m_RecordClusterNodeLock);
然后尝试从
m_RecordClusterNodes
中找到对应的clusterNodeId
。若找不到,也会导致后面的代码不再执行,但在这种情况下,理应看到“444444444444444444”的日志。调试建议:
- 确认
m_RecordTaskNodes
容器是否确实包含了传入的deviceId
。 - 如果容器为空或发生了异常,比如多线程环境下的数据竞争问题,你可以进一步排查互斥锁是否设置正确。
- 在关键路径中增加更多日志,以确定具体卡住在哪一步,例如在每个条件判断前加一条调试输出。
- 使用调试工具(如gdb)单步调试,从而观察程序运行状态并确认各变量值。
- 确认
综合来看,若未见到后续日志,很可能是由于某种原因导致程序早于预期终止或抛出了异常,需要进一步检查输入数据和状态。
内容由零声教学AI助手提供,问题来源于学员提问