我正在 Unity 中制作一个简单的游戏。由于时间有限,我就不写单元测试了。相反,我大量使用断言 (
Debug.Assert
) 和异常来确保我的游戏逻辑的正确性。
但是,我所依赖的确保正确性的机制被 Unity 最令人沮丧的设计决策完全破坏了 --- 它捕获所有异常和断言并将它们打印在日志中。然后,它继续执行游戏,就像什么都没发生一样。
选择Unity使得以下事情完全不可能发生:
因此我的问题:如何防止 Unity 这样做?
在 Visual Studio 中,
Debug -> Windows -> Exception Settings
,让调试器在抛出异常时立即中断,无论是否可以处理。
但是,因为Unity本身并不关心自己抛出的一些异常,所以每当我这样调试我的程序时,我都会先被Unity引擎抛出的异常搞得不知所措。所以不幸的是这不起作用。
在互联网上进行了大量搜索后,我最终必须实现自己的断言函数,并替换用此断言抛出的所有现有致命异常,就像@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);
}
}