如何防止Unity捕获并忽略所有异常

问题描述 投票:0回答:1

我正在 Unity 中制作一个简单的游戏。由于时间有限,我就不写单元测试了。相反,我大量使用断言 (

Debug.Assert
) 和异常来确保我的游戏逻辑的正确性。

但是,我所依赖的确保正确性的机制被 Unity 最令人沮丧的设计决策完全破坏了 --- 它捕获所有异常和断言并将它们打印在日志中。然后,它继续执行游戏,就像什么都没发生一样。

选择Unity使得以下事情完全不可能发生:

  1. 当断言失败或未处理异常时,调试器会中断程序
  2. 然后我可以通过调用堆栈进行调试并检查监视中的变量值以查看出了什么问题

因此我的问题:如何防止 Unity 这样做?

我尝试过的:

在 Visual Studio 中,

Debug -> Windows -> Exception Settings
,让调试器在抛出异常时立即中断,无论是否可以处理。

但是,因为Unity本身并不关心自己抛出的一些异常,所以每当我这样调试我的程序时,我都会先被Unity引擎抛出的异常搞得不知所措。所以不幸的是这不起作用。

c# unity-game-engine exception assertion
1个回答
0
投票

在互联网上进行了大量搜索后,我最终必须实现自己的断言函数,并替换用此断言抛出的所有现有致命异常,就像@shingo 在评论中建议的那样。

虽然这样我会丢失异常的类型,但至少调试器会在出现问题时停止游戏。

public static void MyDebugAssert(bool condition, String msg = "")
{
    if(!condition)
    {
        Debugger.Break();
        Debugger.Log(0, "Assertion", "Debug Assertion Failed!\n" + msg);
        //ExitProcess(-1);
        Application.Quit(-1);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.