Clang检测工具

在安卓和Linux项目中部署Clang检测工具来快速查找问题。

Choose your operating system:

Windows

macOS

Linux

虚幻编译工具(Unreal Build Tool) 支持针对Linux和安卓平台的Clang 检测工具(Sanitizer)。本文介绍了引擎支持的检测工具信息和用法。

概览

很多编程错误并不违反C++的句法,所以在编译的时候不会被编译器发现。然而即使句法是正确的,逻辑中的漏洞也会导致严重的问题,比如:

  • 内存泄漏

  • 竞争条件

  • 未初始化的内存

  • 数组中的越界访问

  • 整数溢出

这些错误通常只能在运行的时候通过试错的方式来检测。有了Clang检测工具,错误日志会直接向你报告,帮助你更快速地发现这些问题。

Clang检测工具的详细信息和优点,参阅

[Clang文档]([https://clang.llvm.org/docs/index.html](https://clang.llvm.org/docs/index.html)
)。

编译工具和检测工具一起运行

在运行虚幻编译工具时,针对要使用的检测工具添加UBT参数,然后检测工具便会链接至你的最终可执行文件。以下示例指令行会将 Address Sanitizer (ASan) 链接至你的编译工具:

Build\BatchFiles\Build.bat MyGame Linux Development -WaitMutex -FromMsBuild -EnableASan

运行程序时,检测工具的检测结果会显示在日志里。你可以直接用指令行运行这些代码,也可以在 Visual Studio 中打开你项目的 属性(Properties),然后把检测工具的指令加至 NMake > 创建命令行(Build Command Line)

Clang检测工具通常会消耗多余的内存空间。取决于具体的检测工具,它会降低关联程序的运行速度2到15倍。更多信息请参考Clang对于每个检测工具的规格文档。

受支持的检测工具

以下是UBT支持的检测工具:

检测工具

UBT指令

描述

Address Sanitizer (ASan)

-EnableASan

检测多种内存访问的问题,包括越界访问和内存泄漏。

HWASan (Android only)

-EnableHWASan

针对安卓平台的ASan硬件加速版本,可以节约20-30%的内存。

Thread Sanitizer (TSan) (Doesn't work on Android)

-EnableTSan

检测诸如竞争条件之类的线程问题。

Undefined Behavior Sanitizer (UBSan)

-EnableUBSan

检测任何C++不支持的行为,比如越界错误、整数溢出和未初始化内存。

MinUBSan (Android only)

-EnableMinUBSan

针对安卓平台的UBSan轻量版本。

Memory Sanitizer (MSan) (Linux only)

-EnableMSan

检测试图访问未初始化内存的行为。

本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。