Csmith 能够随机生成没有未定义行为的C程序(借助静态规则和运行时检查),用于编译器、静态分析器等处理源代码的工具的测试。
注意:生成的程序可能包含死循环,并且毕竟是随机生成的,与人写的代码还是有很大区别的。而且Csmith 只能生成C程序,不能生成C++程序。yarpgen可以随机生成C++程序。
¶随机测试+差分测试
包含如下三步:
- 使用Csmith生成大量有效的C程序
- 用不同版本的编译器运行同一个C程序
- 比较编译器的输出,以多数的结果作为正确输出
¶安装
1 | git clone https://github.com/csmith-project/csmith.git |
这里的m4
是一个文本处理工具,通常用于宏处理和文本替换。它可以用来编写、维护和生成各种类型的文本文件,包括配置文件、脚本、程序源代码等。
¶运行
1 | export PATH=$PATH:$HME/csmith/bin |
注:生成的程序的输出固定为checksum = xxx
的形式,通过比较运行后输出的checksum的值来判断编译器是否正确编译。