IEnumerator方法在lambda中使用时无法检查变量

时间:2018-04-18 11:58:06

标签: c# debugging unity3d visual-studio-2017 .net-4.6

我目前正在开发一个项目,我在其中为GameObject分配一个移动例程。 在上面提到的例程中,我分配了一些在例程循环中使用的变量。但是,一旦我在lambda表达式中访问任何这些变量,事情就会开始变得奇怪。

有趣的是,这似乎只发生在IEnumerator方法中。

使用VS 2017进行调试时,该变量不再列在locals窗口下,也不能进行检查。而且,在尝试检查变量时,Unity可能会崩溃。导致崩溃的是什么,我不确定,似乎缺少对变量的内存分配,导致从其他地方读取和写入相同的内存区域或类似内容。

我设法使用以下MonoBehaviour在新项目中重现此行为:

using System;
using System.Collections;
using UnityEngine;

public class Test : MonoBehaviour {

    void Start () {
        Foo2();
        StartCoroutine(Foo());
    }

    void Foo2() {
        object bar = null;
        Action foobar = () => bar.ToString();
        // when placing a breakpoint on the above line, no problem will occur
    }

    IEnumerator Foo() {

        object bar = null;
        Action foobar = () => bar.ToString();
        // when placing a breakpoint on the above line, 'bar' will glitch and may crash unity
        yield break;
    }
}

我的Unity设置:

  • 版本:2017.3.1f1
  • 调试器:Visual Studio 2017
  • 脚本运行时:.Net 4.6

有人知道为什么会发生这种情况以及如何防止这种情况发生吗?

0 个答案:

没有答案