奇怪的VS2013错误?还是程序员诱发疾病?

时间:2013-11-11 09:00:55

标签: c++ debugging visual-studio-2013

我有一个继承自GameObject的{​​{1}}类。踩到它们的构造函数已经疯了,但创建的对象没有问题。在有人要求之前,我正在进行调试构建。让我告诉你:

修改由于人们抱怨,我会发布实际代码,而不是图片。

Object

程序执行GameObject::GameObject(string name) : Object(name) { // ... } Component* GameObject::AddComponent(SharedPtrComponent component) { if (find(components.begin(), components.end(), component) == components.end()) { components.push_back(component); return component.get(); } return nullptr; } 构造函数的第一行(即GameObject初始化)后,它会跳转到Object中括号和return nullptr之间的空行

发生了什么事?

PS。我在快递和终极版本上尝试了这个。完全相同的步进序列。我尝试了清理等。AddComponent构造函数同样起作用。毫米。

更新:好吧,也许这样可行:这是一个最小的项目,仍然展示了奇怪的踩踏:VS2013 project

2 个答案:

答案 0 :(得分:2)

好的,我相信我明白这里发生了什么。简而言之:它是MSVS调试器中的 visual 错误。

让我们看看发生了什么:首先创建GameObject,其中包括以下步骤:调用parent ctor(Object)并调用初始值设定项和/或内联初始化程序。您没有初始值设定项,但您有内联初始化程序 GameObject* parent = nullptr;

这正是调试器转向visually crazy的原因,它必须执行初始化器,而不是在这里,而是在头部中。我不确定为什么会出现这种故障,但如果你删除内联初始化程序,它就会消失。我建议向Visual Studio团队提交一个错误。它只是一个视觉错误,但仍然是一个错误。

答案 1 :(得分:0)

如果在单步执行调试器中的代码时遇到问题,通常最好切换到反汇编视图(ALT + 8)并逐步执行。

您不必了解大部分装配。只需查看call指令等。请注意,如果您使用F11进入另一个功能(从反汇编视图call),则可以切换回实际的源代码(如果有的话)。