主要观点:SortChecker 是检测传递给qsort
等函数的比较函数中违反排序公理的工具,通过LD_PRELOAD
拦截qsort
及相关函数进行检查,可用于 C 和 C++程序,对复杂数据结构易违反要求导致未定义行为和运行时错误。
关键信息:
- 支持多种操作系统如 Linux、BSD、Darwin 等,依赖 Glibc 和 Bash,MIT 许可。
- 已在 Ubuntu 14、Fedora 22 等进行基本测试,发现许多程序的错误,如 Libxt6、Libharfbuzz 等。
- 使用简单,无需重建应用,通过
LD_PRELOAD
或sortcheck
脚本运行,可通过环境变量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 等,还需解决线程安全性等问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。