跳到主要内容

使用UBSan检测未定义行为

代码中出现未定义行为,最初可能不会产生任何问题,但是随着代码的复杂度提高,未定义行为可能造成程序崩溃或发生错误,检测出根源会变得更加困难。UBSan(Undefined Behavior Sanitizer)可以检测代码中出现的未定义行为,帮助用户清除未定义行为引起的运行时错误。

常见的未定义行为有:

  • 除数为零。
  • 使用未对齐的指针,或未对齐的引用。
  • 浮点数转换导致的溢出。
  • 访问空指针。

该功能从DevEco Studio 5.1.0 Release版本开始支持。

使用约束

ASan、TSan、UBSan、HWASan不能同时开启,只能开启其中一个。

开启UBSan

可通过以下两种方式开启UBSan。

方式一

点击********Run > Edit Configurations >**** Diagnostics****,勾选Undefined Behavior Sanitizer开启检测。

方式二

在需要开启UBSan的模块中,通过添加构建参数开启UBSan检测插桩,在对应模块的模块级build-profile.json5中添加命令参数:

"arguments": "-DOHOS_ENABLE_UBSAN=ON"

使用UBSan

  1. 运行或调试当前应用。

  2. 当检测出未定义行为时,弹出UBSan log信息,点击信息中的链接即可跳转到未定义行为的代码处。日志中的异常检测类型请参考UBSan异常检测类型

    无论编译模式是debug或release,均有链接可直接跳转至源码。