GitHub - yugr/sortcheck:用于检测 qsort/bsearch 回调中违反排序公理的工具。

主要观点:SortChecker 是检测传递给qsort等函数的比较函数中违反排序公理的工具,通过LD_PRELOAD拦截qsort及相关函数进行检查,可用于 C 和 C++程序,对复杂数据结构易违反要求导致未定义行为和运行时错误。
关键信息

  • 支持多种操作系统如 Linux、BSD、Darwin 等,依赖 Glibc 和 Bash,MIT 许可。
  • 已在 Ubuntu 14、Fedora 22 等进行基本测试,发现许多程序的错误,如 Libxt6、Libharfbuzz 等。
  • 使用简单,无需重建应用,通过LD_PRELOADsortcheck脚本运行,可通过环境变量SORTCHECK_OPTIONS自定义行为。
  • 可应用于完整 Linux 发行版,需添加libsortcheck.so/etc/ld.so.preload等操作,但可能导致系统故障,需备份。
  • 构建时运行make,支持多种选项如 AddressSanitizer 等,测试运行make check,目前只支持 C 语言。
    重要细节
  • 工具拦截qsort等函数前进行各种检查,如比较函数的稳定性、数组排序、对称性、传递性等。
  • 支持的选项包括max_errors(最大错误报告数)、debug(打印调试信息)等,可通过环境变量或文件设置。
  • 在 Darwin 系统上需使用DYLD_INSERT_LIBRARIES等,可能需禁用 System Integrity Protection。
  • 未来计划包括支持更多 C++代码、成为标准调试工具、检查其他流行排序 API 等,还需解决线程安全性等问题。
阅读 22
0 条评论