QC -io 服务器排查报错方式/报错: Failed to convert string to integer of varId variable!“
进断点控制台有报错之后,复制报错信息到 头部菜单栏
1.编辑 -> 2.Find/Replace ->3.Advanced Find ->4. Project“xxxxx” 能找到问题点
再分析定位
在排查报错时候,进入了这个报错,msgInfo = "MyTcpRedis: Failed to convert string to integer of varId variable!"
C++ 代码:
//依据设备io地址从redis中查找变量
bool MyTcpRedis::searchVariabeByIoAddr(const QString& ip, quint16 ioAddr, quint32 *varId)
{bool ok;quint16 t;QString sid;QString msgInfo;if ((m_redis) && (m_redis->isConnected())) {//依据varID读取ip和ioAddr,io_addr_var_id(string)sid = devIoAddrToVarIdTbl + ":" + ip + ":" + QString::number(ioAddr);t = m_redis->get(sid).toUInt(&ok);if (!ok) {msgInfo = "MyTcpRedis: Failed to convert string to integer of varId variable!";MyDebug::print(msgInfo);return false;}*varId = t;return true;}return false;
}
当出现 "Failed to convert string to integer" 这个错误时,意味着从 Redis 读取回来的字符串无法成功转换为无符号整数。主要原因如下:
- 键值不存在:在 Redis 里,对应的键可能并不存在,此时获取到的就是空字符串。
- 数据格式有误:键对应的值也许不是合法的整数字符串,像包含了字母、特殊符号等情况。
- 数值范围不匹配:就算字符串是合法的整数,但如果超出了
quint16
(也就是 0 - 65535)的范围,也会导致转换失败。
核实 Redis 中的数据情况
redis-cli get "io_addr_var_id:设备IP:IO地址"
- 若返回 (nil):这表明键不存在,你就得检查键的格式或者数据是否成功写入。
- 若返回非整数字符串:例如 "abc"、"123.45",那就要修正数据写入的逻辑。
- 若返回的整数值超出范围:比如大于 65535,就需要把存储类型改成
quint32
。