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 调试器转移行为?的主要内容,如果未能解决你的问题,请参考以下文章