前言
Unity中提供了三种错误检测机制,这三种机制在功能上看起来类似,通常容易混淆。三种机制各有其设计意图与相应的使用情景。本文就三者的区别及适用场景加以介绍,以帮助读者正确使用三种工具。
一、Debug
Debug其功能是输出调试信息到控制台,主要用于开发阶段发生功能异常时进行临时性的调试,已帮助开发者快速定位错误位置。Debug类似一只电笔,在电路发生故障时,进行多点测试辅助定位故障点。也可以用于记录常规信息,帮助开发者了解程序执行状态。其记录的错误一般为非致命性的。
需要注意的是,Debug存在性能消耗,在发布阶段一般会使用条件编译的手段将其从发布代码中排除。
二、断言
断言其用途是在开发和测试过程中验证代码假设的机制。断言会检查条件是否为真,如果为假,则会在编辑器中中断执行,并显示错误信息。断言通常仅在开发和测试阶段使用,不应该出现在生产代码中。断言是契约式编程的工具。通常在测试用例中使用断言,在一些自动化测试或TDD中会经常看到断言的使用。相比于if else加Debug的组合,断言具有更简洁的语法以及更明确的含义,它声明了契约,这种契约表示程序在当下必须要满足的状态,而if else 语句却可能表示如果条件不满足对控制流进行分流的含义。可以将断言理解为防火墙,用于检测并防止非法进入或错误状态的发生。
三、异常
异常主要用于处理受运行环境影响的非确定性问题。此类问题一般在开发阶段无法确定,其触发条件受具体运行环境的影响。如开发的是将供外部使用的插件,用户所传的参数为无效参数,或以设计意图相违背的方式调用;受网络波动引发的通信异常等。
异常作为处理运行时异常的重要手段提供错误传播、捕获、处理的机制,允许将错误返回给调用方让调用方决定异常的处理方式。使得程序有机会从错误中恢复而不至于崩溃。可以将其比作保险丝,在出现短路等意外时触发保护机制。
总结
- Debug:用于临时性调试和错误记录,帮助开发者快速定位和修复问题。
- 断言(Assertion):用于代码假设验证和条件测试,确保程序按预期运行。
- 异常(Exception):用于处理不可预见的运行时错误,提供错误恢复机制,增强程序的健壮性和稳定性。