首页 > 解决方案 > 在没有执行实际行的情况下触发 VisualStudio 断点

问题描述

我在 Unreal Engine 4 中有一个项目,我正在 Visual Studio 2019 中调试游戏代码。在某些情况下会遇到断点,但我相信代码并没有真正执行。你能告诉我这怎么可能?

1   void UTrace::DrawDebug()
2   {
3       for (TPair<Vector2DTuple, int> edge : EdgesMap)
4       {
5           Vector2DTuple vertices = edge.Key;
6           FVector source = FVector(*vertices.Key, 0.f);
7           FVector target = FVector(*vertices.Value, 0.f);     
8
9           DrawDebugLine(GetWorld(), source, target, FColor::Black, false, -1.f, -1, 3.f);
10          UE_LOG(LogTemp, Warning, TEXT("%f %f %f"), source.X, source.Y, source.Z);
11          UE_LOG(LogTemp, Warning, TEXT("%f %f %f"), target.X, target.Y, target.Z);
12          UE_LOG(LogTemp, Warning, TEXT("-------"));
13      }
14  }

我在第 9 行和第 11 行有一个断点。在游戏模式运行时,EdgesMap 填充了一些元素后,第 9 行的断点被命中。在这一刻,变量似乎未初始化。

第一次命中断点上的局部变量

然后我按 F5 继续程序,并在第 9 行(不是我假设的第 11 行)再次命中断点。并且其中一个变量已初始化,而另一个未初始化。

第二次命中断点上的局部变量

然后继续程序,在第 9 行再次命中断点,到目前为止没有执行任何 UE_LOG。

第三次命中断点上的局部变量

之后,我继续程序,最后在第 11 行的断点被命中,控制台中有一个日志,其中包含正确初始化的变量 (x=150, y=650)。

问题:

观察:

标签: c++visual-studio-2019unreal-engine4

解决方案


推荐阅读