动态代码分析是一种在应用程序执行期间分析应用程序的方法。这种方法有助于暴露只能在运行时发现的漏洞和错误,例如内存泄漏、未初始化的访问、并发问题、未定义的行为情况等等。
使用动态分析时,请记住:
- 动态分析工具可能会导致应用程序性能下降,
- 动态测试只发现实际执行代码中的缺陷,因此应单独解决全覆盖问题。
对于动态代码分析, CLion集成了Valgrind Memcheck、Google Sanitizers、CPU Profiler和Code Coverage工具,为它们提供可视化输出和方便的功能,帮助您处理结果。
Google sanitizers
Sanitizers是由 Google 设计的用于动态代码分析的开源工具。CLion 与以下 Sanitizer 集成:
- AddressSanitizer (ASan)
- LeakSanitizer (LSan)
- ThreadSanitizer (TSan)
- UndefinedBehaviorSanitizer (UBSsan)
- MemorySanitizer (MSan)

由于Sanitizers基于编译器检测,您需要重新构建项目才能开始使用这些工具。
配置Sanitizers
指定编译器标志
- 调整以下模板行并将其添加到您的CMakeLists.txt:
- AddressSanitizer 的地址
- LeakSanitizer泄漏
- ThreadSanitizer 的线程
- undefinedBehaviorSanitizer的未定义
- MemorySanitizer 的内存
用于[sanitizer_name]以下其中一项:
[Additional_flags]是其他编译标志,例如-fno-omit-frame-pointer, fsanitize-recover/fno-sanitize-recover,-fsanitize-blacklist等。
用于[-g]在警告消息中包含文件名和行 。
添加优化级别[-OX]以获得合理的性能。
非 CMake 项目的Sanitizers

Sanitizers 的输出可视化仅适用于 CMake 项目。对于 Makefile 和编译数据库,输出以纯文本形式记录到控制台。
调整Sanitizers设置
- 转到设置/首选项 | 构建、执行、部署 | 动态分析工具| 消毒剂并设置以下内容:
- 运行时标志
- 对 Sanitizer 的输出使用视觉表示

在本节中,指定每个 Sanitizer 的运行时选项。您可以手动执行此操作,也可以单击从现有环境变量中导入标志按钮(如果存在变量,则此按钮可用ASAN/MSAN/LSAN/TSAN_OPTIONS)。

要使可视化输出可用,请切换到至少 3.8.0 的 Clang 或至少 5.0.0 的 GCC
当清除此复选框或编译器不符合要求时,sanitizers 输出以纯文本形式显示:

提供 llvm-symbolizer 的路径
- 为了让 Sanitizer 将地址转换为源代码位置并使堆栈跟踪易于理解,请确保PATH或*SAN_SYMBOLIZER_PATH环境变量包含llvm-symbolizer的位置。
注意PATH应该指向llvm-symbolizer的目录(例如/usr /bin/),而*SAN_SYMBOLIZER_PATH应该指向特定的二进制文件(例如/usr /dir /llvm-symbolizer)。
如果使用 Clang 编译器,如果PATH或*SAN_SYMBOLIZER_PATH变量都没有指向llvm-symbolizer,您将收到来自 CLion 的通知:

以上就是在 CLion中利用Sanitizer进行编译器检测配置项目的相关教程内容,更多关于CLion使用教程的内容可进入官 查看。
CLion| 下载试用
CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。
CLion技术交流
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!