Erlfuzz
https://gitcode.com/gh_mirrors/er/erlfuzz/overview
简介:
erlfuzz 是一个用于对 Erlang 编译器和虚拟机进行模糊测试的工具,目的是自动化发现潜在的编译和运行时错误。它生成随机的 Erlang 程序,并通过这些程序对相关工具(如 Erlang 编译器 erlc、虚拟机 BEAM、以及静态分析工具如 Dialyzer 等)进行测试。
主要功能
模糊测试:生成随机 Erlang 程序,并用于测试 Erlang 编译器(erlc)和虚拟机(BEAM)的健壮性。
生成和最小化测试用例:可以生成可能导致崩溃的最小化测试用例,帮助开发者定位问题。
多平台:支持 Linux 和 macOS
安装和构建
依赖:
Rust(包括 Cargo)
一些额外的 Linux 工具:parallel, timeout, ulimit
构建命令: 在有网络的计算机上执行以下命令构建:
1 | |
使用方法
基本用法: 可以使用提供的脚本进行模糊测试。通过以下命令运行模糊测试:
1 | |
这将使用 parallel 工具并行运行模糊测试,使用计算机上的所有核心。如果需要限制核心数(例如 5 核),可以添加 -j 5 参数。
其他工具脚本: erlfuzz 还可以与其他工具(如 erlfmt, dialyzer, eqwalizer 等)结合使用,进行相应的模糊测试。每个工具可能需要额外的选项来避免在错误报告中出现不确定性数字(如时间戳、进程 ID 等)。
调试和日志
- 如果
erlfuzz本身出现问题,可以通过设置RUST_LOG=debug或RUST_LOG=trace环境变量来获得详细的日志。 - 可以调整不同模块的日志级别。例如:
1 | |
测试用例最小化
通过以下命令,可以减少已生成的测试用例的大小:
1 | |
这将使用给定的种子值减少测试用例的大小。
erlfuzz 已经发现了 Erlang 和相关工具中的一些问题,并列出了具体的 GitHub 问题链接,帮助开发者查找和定位可能的错误:
BEAM VM:
- https://github.com/erlang/otp/issues/6634
- https://github.com/erlang/otp/issues/6645
- https://github.com/erlang/otp/issues/6655
- https://github.com/erlang/otp/issues/6701
- https://github.com/erlang/otp/issues/6717
- https://github.com/erlang/otp/pull/6838
- https://github.com/erlang/otp/pull/6839
- https://github.com/erlang/otp/issues/7282
erlc:
- https://github.com/erlang/otp/issues/6163
- https://github.com/erlang/otp/issues/6164
- https://github.com/erlang/otp/issues/6169
- https://github.com/erlang/otp/issues/6183
- https://github.com/erlang/otp/issues/6184
- https://github.com/erlang/otp/issues/6409
- https://github.com/erlang/otp/issues/6410
- https://github.com/erlang/otp/issues/6418
- https://github.com/erlang/otp/issues/6426
- https://github.com/erlang/otp/issues/6427
- https://github.com/erlang/otp/issues/6444
- https://github.com/erlang/otp/issues/6445
- https://github.com/erlang/otp/issues/6458
- https://github.com/erlang/otp/pull/6415#issuecomment-1312012344
- https://github.com/erlang/otp/issues/6467
- https://github.com/erlang/otp/issues/6468
- https://github.com/erlang/otp/pull/6415#issuecomment-1314007288
- https://github.com/erlang/otp/pull/6415#issuecomment-1315158928
- https://github.com/erlang/otp/issues/6474
- https://github.com/erlang/otp/pull/6415#issuecomment-1318539291
- https://github.com/erlang/otp/pull/6415#issuecomment-1325303532
- https://github.com/erlang/otp/pull/6415#issuecomment-1326240668
- https://github.com/erlang/otp/issues/6458#issuecomment-1326618218
- https://github.com/erlang/otp/issues/6515
- https://github.com/erlang/otp/issues/6551
- https://github.com/erlang/otp/issues/6552
- https://github.com/erlang/otp/issues/6553
- https://github.com/erlang/otp/issues/6552#issuecomment-1353135450
- https://github.com/erlang/otp/pull/6559#issuecomment-1354514130
- https://github.com/erlang/otp/issues/6568
- https://github.com/erlang/otp/issues/6571
- https://github.com/erlang/otp/issues/6572
- https://github.com/erlang/otp/issues/6593
- https://github.com/erlang/otp/issues/6599
- https://github.com/erlang/otp/issues/6601
- https://github.com/erlang/otp/issues/6602
- https://github.com/erlang/otp/issues/6603
- https://github.com/erlang/otp/issues/6604
- https://github.com/erlang/otp/issues/6612
- https://github.com/erlang/otp/issues/6613
- https://github.com/erlang/otp/pull/6619#issuecomment-1368995152
- https://github.com/erlang/otp/issues/6630
- https://github.com/erlang/otp/issues/6633
- https://github.com/erlang/otp/issues/6643
- https://github.com/erlang/otp/issues/6648
- https://github.com/erlang/otp/pull/6651#issuecomment-1377177470
- https://github.com/erlang/otp/pull/6651#issuecomment-1377216462
- https://github.com/erlang/otp/issues/6660
- https://github.com/erlang/otp/pull/6727#issuecomment-1418853979
- https://github.com/erlang/otp/issues/6835
- https://github.com/erlang/otp/issues/6847
- https://github.com/erlang/otp/issues/6848
- https://github.com/erlang/otp/issues/6851
- https://github.com/erlang/otp/issues/6960
- https://github.com/erlang/otp/issues/6962
- https://github.com/erlang/otp/pull/6974
- https://github.com/erlang/otp/issues/7011
- https://github.com/erlang/otp/issues/7128
- https://github.com/erlang/otp/issues/7142
- https://github.com/erlang/otp/issues/7145
- https://github.com/erlang/otp/issues/7147
- https://github.com/erlang/otp/issues/7168
- https://github.com/erlang/otp/issues/7170
- https://github.com/erlang/otp/issues/7171
- https://github.com/erlang/otp/issues/7178
- https://github.com/erlang/otp/issues/7179
- https://github.com/erlang/otp/issues/7180
- https://github.com/erlang/otp/pull/7207
- https://github.com/erlang/otp/pull/7222
- https://github.com/erlang/otp/issues/7248
- https://github.com/erlang/otp/issues/7251
- https://github.com/erlang/otp/issues/7252
- https://github.com/erlang/otp/pull/7271
- https://github.com/erlang/otp/pull/7283
- https://github.com/erlang/otp/pull/7281#issuecomment-1562404185
- https://github.com/erlang/otp/pull/7340
- https://github.com/erlang/otp/issues/7354
- https://github.com/erlang/otp/issues/7370
- https://github.com/erlang/otp/pull/7448#issuecomment-1618443949
- https://github.com/erlang/otp/issues/7467
- https://github.com/erlang/otp/issues/7468
- https://github.com/erlang/otp/pull/7448#issuecomment-1621245246
- https://github.com/erlang/otp/issues/7477
- https://github.com/erlang/otp/issues/7478
- https://github.com/erlang/otp/pull/7489#issuecomment-1633795558
- https://github.com/erlang/otp/issues/7494
- https://github.com/erlang/otp/issues/7504
- https://github.com/erlang/otp/pull/7527#issue-1833154980
- https://github.com/erlang/otp/issues/7901
- https://github.com/erlang/otp/pull/7902#issuecomment-1825299276
- https://github.com/erlang/otp/pull/7902#issuecomment-1825301929
dialyzer:
- https://github.com/erlang/otp/issues/6419
- https://github.com/erlang/otp/issues/6473
- https://github.com/erlang/otp/issues/6518
- https://github.com/erlang/otp/issues/6580
- https://github.com/erlang/otp/issues/7138
- https://github.com/erlang/otp/issues/7153
- https://github.com/erlang/otp/issues/7181
- https://github.com/erlang/otp/issues/7325
erlfmt:
eqWAlizer:
- https://github.com/WhatsApp/eqwalizer/commit/56634681d5de33819c371285ff5682d58384518b
- https://github.com/WhatsApp/eqwalizer/commit/a253f6ee5c202d683c2719d325fd31acc46221a3
- https://github.com/WhatsApp/eqwalizer/commit/d8afa8e7cc27a115570198539128cffd16e16866
- https://github.com/WhatsApp/eqwalizer/commit/75de28b27345b7796cf4c39a460d93b1070e02ac
- https://github.com/WhatsApp/eqwalizer/commit/ae608820ec08c2108e438a92b9d7a0fdf999a06b
- https://github.com/WhatsApp/eqwalizer/commit/904449753e68388bc5b33f8b12217b6af6978bf7
inferl:
- https://github.com/facebook/infer/commit/dbdcf4863ee2751a6b671f072850b29b4916bf5b
- https://github.com/facebook/infer/commit/5453911ea7a69dfb66f2cb697976eeeb9c30b176
Gradualizer
Erlfuzz
https://jimi-lab.github.io/2024/11/01/Erlfuzz/