我有一个继承自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
答案 0 :(得分:2)
好的,我相信我明白这里发生了什么。简而言之:它是MSVS调试器中的 visual 错误。
让我们看看发生了什么:首先创建GameObject
,其中包括以下步骤:调用parent ctor(Object
)并调用初始值设定项和/或内联初始化程序。您没有初始值设定项,但您有内联初始化程序 GameObject* parent = nullptr;
这正是调试器转向visually crazy
的原因,它必须执行初始化器,而不是在这里,而是在头部中。我不确定为什么会出现这种故障,但如果你删除内联初始化程序,它就会消失。我建议向Visual Studio团队提交一个错误。它只是一个视觉错误,但仍然是一个错误。
答案 1 :(得分:0)
如果在单步执行调试器中的代码时遇到问题,通常最好切换到反汇编视图(ALT + 8
)并逐步执行。
您不必了解大部分装配。只需查看call
指令等。请注意,如果您使用F11进入另一个功能(从反汇编视图call
),则可以切换回实际的源代码(如果有的话)。