QC -io 服务器排查报错方式/报错: Failed to convert string to integer of varId variable!“

发布于:2025-06-24 ⋅ 阅读:(20) ⋅ 点赞:(0)

进断点控制台有报错之后,复制报错信息到 头部菜单栏

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 读取回来的字符串无法成功转换为无符号整数。主要原因如下:

  1. 键值不存在:在 Redis 里,对应的键可能并不存在,此时获取到的就是空字符串。
  2. 数据格式有误:键对应的值也许不是合法的整数字符串,像包含了字母、特殊符号等情况。
  3. 数值范围不匹配:就算字符串是合法的整数,但如果超出了quint16(也就是 0 - 65535)的范围,也会导致转换失败。

核实 Redis 中的数据情况

redis-cli get "io_addr_var_id:设备IP:IO地址"

  • 若返回 (nil):这表明键不存在,你就得检查键的格式或者数据是否成功写入。
  • 若返回非整数字符串:例如 "abc"、"123.45",那就要修正数据写入的逻辑。
  • 若返回的整数值超出范围:比如大于 65535,就需要把存储类型改成quint32

网站公告

今日签到

点亮在社区的每一天
去签到