C++ VS 调试器转移行为?

Posted

技术标签:

【中文标题】C++ VS 调试器转移行为?【英文标题】:C++ VS Debugger diverting behaviour? 【发布时间】:2016-12-30 19:50:16 【问题描述】:

我目前正在努力调试以下代码部分。我在 Windows 10 上使用 VS2015 社区版。

[(BR)] 是一个断点

以下是我的代码的(精简版)版本。我基本上嵌套了从所有游戏对象中提取所有点(X&Y 坐标)的 for 循环。

如你所见,我设置了两个断点。

我点击了调试按钮,它在第一个断点处停止 - 成功。重要的局部变量 counterVertices 为零。也很棒。

然后我点击继续。它三次到同一个断点。

然后我到达第二个断点。 counterVertices 显示为零。为什么?

int counterVertices = 0;
    int counterIndices = 0;
    int beginningOfPolygon = 0;
    //GetData
    for (auto& it : this->gameObjects)  //Iterate over all gameObjects
        beginningOfPolygon = counterIndices;
        for (int i = 0; i < it->getOutline().getNumber(); i++)  //Iterate over all points of the gameObject
            [(BR)]this->vertices[counterVertices] = it->getRenderPoint(i).x;
            counterVertices++;
            this->vertices[counterVertices] = it->getRenderPoint(i).y;
            counterVertices++;
            [(BR)]if (this->vertices[counterVertices-2] == this->vertices[counterVertices-1] && this->vertices[counterVertices-1] == 0.0f) 
                cout << "A point on 0/0." << endl;
            
            this->vertices[counterVertices] = 0.0f;
            counterVertices++;
            //Add Line to draw
            this->indices[counterIndices * 2] = counterIndices;
            this->indices[(counterIndices * 2) + 1] = counterIndices + 1;
            counterIndices++;
        
        this->indices[(counterIndices * 2) - 1] = beginningOfPolygon; 

    

我完全迷失了,因为这甚至不是我想要解决的问题,而是一直试图解决我最初的问题。

已经感谢您的宝贵时间

PS:我有整个事情的截图,这个过程是可重新创建的。我可以清理并重建解决方案,重新启动并进行后空翻。调试行为不会改变。

PPS:程序的行为/工作方式表明 counterVertices 正确增加,但调试器信息与此相矛盾。

【问题讨论】:

您是否尝试过从第一个断点向前推进而不是继续,看看会发生什么?我的第一个想法是可能发生了异常(例如无效索引),该异常被捕获在将执行拉出循环的 try/catch 中。或者大卫布拉德利刚刚提出的建议。 您的源代码是否与您的可执行文件同步? 向前一步就是正常的一步。再往前走会导致“后退”?到第一个断点所在的行。我没有异常处理,也没有多线程。也没有尝试/捕捉。 @Jean-FrançoisFabre 我该如何检查?谢谢 尝试重建。正如答案所说,一定要处于“调试”状态,而不是“发布”状态。 【参考方案1】:

确保您已关闭优化。优化确实会使调试变得困难,因为值将保存在寄存器中,直到需要时才存储。而且代码流可能非常不直观。

【讨论】:

以上是关于C++ VS 调试器转移行为?的主要内容,如果未能解决你的问题,请参考以下文章

VS2012 如何在输出窗口中打印调试信息 C++语言

VS2015 C++没办法调试,怎么解决

自定义 VS C++ 调试器 [重复]

C++ VS 调试代码,设置你自己的调试标志

为啥我的 VS Code 调试器在我的 C++ 代码周围弹跳?

VS2013编程C++ 调试和生成老是出现问题,求救~~~