c++ - 在没有执行实际行的情况下触发 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)。
问题:
- 是某种奇怪的 Visual Studio 行为还是我的代码中的一些错误?
- 如何判断该行是否真正执行?
- 它是否以某种方式与局部变量的初始化有关?
观察:
- 这个奇怪的断点只出现在第一个 Draw Debug 方法的行上。如果我在上面几行打了一个不同的电话,那么这会发生在之前的电话上。
- 集合 EdgesMap 只有一个元素(因此循环只有一次 DrawDebug 调用的迭代)
- DrawDebug 方法仅从 onTick 方法调用(它不是从某些构造函数调用)
解决方案
推荐阅读
- php - 在函数中使用变量实现多行 php 代码
- java - Java 创建一个内部变大的 2d int 数组
- python - 在 Android 上使用 bash shell 打开浏览器后尝试输入搜索数据
- scala - 使用 sbt 之类的 gradle 构建多个项目
- angular - 清理数组不会更新我的 ngFor
- html - 如何在“for”中放置2个或更多“id”?
- python - Django 子查询表达式包含混合类型。您必须设置 output_field
- java - 如何在许多正则表达式键中获取价值?
- html - 语义 html - 组合框中的自动完成结果
- c++ - 可推导的非类型参数