何时使用可中断UE4中程序执行的断言

时间:2018-09-01 10:57:41

标签: unreal-engine4 assertion

在虚幻引擎4中,有three different assertion "classes"。在断言失败的情况下,所有工作都像断点一样。

  1. 报告错误并暂停执行。

    • check*():像C中的assert()一样,可以由DO_CHECK 0禁用
    • verify*():类似于check*(),但表达式仍在DO_CHECK 0上执行(例如,用于变量分配)
    • 缺点:停止程序执行(应用程序结束,编辑器用户可以松散未保存的工作)
    • 何时使用:捕获致命错误
  2. 仅在调试版本中报告错误并暂停执行。

    • checkSlow()checkfSlow()verifySlow()(请参阅(1))
    • 与(1)的区别:它们仅在调试版本中有效(DO_GUARD_SLOW 1时)
  3. 报告错误(并且不会停止执行)。

    • ensure*():类似于check*(),但程序执行can be continued after the break
    • 何时使用:获取有关意外状态的通知
        

      在需要运行时代码验证但仍在处理错误情况时很有用

(3)非常适合作为调试(您必须手动设置断点)的快速替代方法,因为它会在失败时进入代码/调用堆栈,但允许应用程序随后继续运行。

但是,我没有看到(1)和(2)的有意义的应用程序,因为无论如何,由于致命故障(最终导致UE4编辑器崩溃),程序的执行都被暂停了。换句话说:除了使用check[Slow]() / verify[Slow]()捕获致命错误之外,我还可以让它使未处理的致命错误崩溃,并从崩溃中检查调用堆栈以修复错误;而不是从手动声明中检查调用堆栈。

所以我的问题是:何时使用断言来暂停执行((1)和(2))?

check() made here的推理似乎鼓励编写不安全的代码。

  

编译器可以在保证条件为真的前提下根据check()优化代码。

0 个答案:

没有答案