Unity使用VisualStudio查找死循环代码段

最近在写 BUG 时经常发现 Unity 编辑器停止响应或卡死不动,凭借多年写 BUG 的经验判断,肯定是哪里有个死循环卡住了主线程。
模拟死循环
死循环(endless loop)是一种奇特的生物,它终日潜伏在年久失修的历史代码中,静静地等待出山的机会。
某天,当你无意间修改了某个参数,潜伏已久的死循环就立刻跳出来,让你措手不及。下面是一个造成死循环的例子:
[ContextMenu("test")]
public void StartEndlessLoop()
{
StartCoroutine(endlessLoop());
}
IEnumerator endlessLoop()
{
yield return 0;
while (true)
{
//yield return new WaitForSeconds(1f);
//死循环爬 fk endless loop
}
}
执行StartEndlessLoop
方法后,惊喜的一幕发生了,没错,Unity Editor 停止响应:
使用VS找出死循环
- 首先保证 VS 安装了
Visual Studio Tools For Unity
扩展。 - 点击 VS 上方的
附加到Unity
,将解决方案附加到 Unity: -
点击
调试->窗口->线程
,打开线程调试面板: -
在 Unity Editor 中点击 Play,并执行上面的死循环代码:
-
Editor 停止响应后,点击 VS 上的全部中断按钮,中断调试:
-
在线程窗口中可以见到当前调用的语句,即为死循环位置:
-
双击线程窗口中的位置一栏,自动跳转到脚本代码执行位置:
总结
BUG 爱你。
感谢大哥..写了个有几率出现的死循环Bug,死活找不到.浪费了整整一天. 这个文章拯救了我 再次感谢大哥