运行会产生错误的数字,但调试效果很好

Running gives wrong numbers, but debugging works well?

本文关键字:调试 很好 数字 错误 运行      更新时间:2023-10-16

我的代码有问题。当我运行代码时,短"操作码"具有错误的值 52496。所以我一步一步地调试代码...当我这样做时,"操作码"具有正确的值 4624!有人可以给我一个提示吗?

void packet_get()
{
    boost::shared_ptr<boost::array<unsigned char, 2>> opc(new boost::array<unsigned char, 2>);
    recv_two_bytes(opc);
    unsigned short opcode;
    unsigned char * test[2];
    test[0] = &opc->at(0);  // *test[0] == 0x12
    test[1] = &opc->at(1);  // *test[1] == 0x10
    opcode = 0;
    int i = 0;
    for(i = 0; i <= 1; i++)
    {
        opcode = (opcode<<8) | *(test[i]);
    }
    // opcode should now be short 4624
}

通常,当程序的行为在正常运行和调试运行之间不同时,这是由于未定义的行为。其中一个常见错误是未初始化的变量。

当您执行程序时,会为其提供一个很可能未初始化的堆栈。在调试模式下,调试器可以初始化此堆栈。因此,未初始化的变量在调试和正常执行中很容易具有不同的值(在调试模式下甚至为 0,大多数时候这是您实际上想要给变量但忘记的)。

您的recv_two_bytes函数中似乎有一些这样的错误。在编译器上启用所有警告将有助于确定问题(如果问题更微不足道)。

还要注意其他错误,例如索引数组。

相关文章: