CG-bench
收藏CG-Bench 数据集概述
数据集简介
CG-Bench 是一个综合性基准数据集,旨在评估大型语言模型(LLMs)在真实世界 C/C++ 代码库中辅助构建调用图的能力。该基准特别关注通过函数指针进行的具有挑战性的间接函数调用,这对传统静态分析工具来说 notoriously 难以解决。
数据集结构
包含的项目
基准包含来自七个主要 C/C++ 项目的示例:
| 项目 | 领域 | 代码行数(千行) | 描述 |
|---|---|---|---|
| openssh | 安全 | ~120 | 安全外壳(SSH)协议实现 |
| curl | 网络 | ~182 | 用于传输数据的命令行工具和库 |
| redis | 数据库 | ~200 | 内存数据结构存储 |
| zfs | 文件系统 | ~380 | ZFS 文件系统实现 |
| wrk | 基准测试 | ~601 | HTTP 基准测试工具 |
| ffmpeg | 多媒体 | ~1,257 | 完整的多媒体框架 |
| gcc | 编译器 | ~6,200 | GNU 编译器集合 |
| 总计 | 所有领域 | ~8,940 | 7 个主要开源项目 |
函数指针类别
基准将函数指针使用模式分为 11 个不同的类型:
fnptr-callback(15 个示例):用作回调的函数指针fnptr-cast(7 个示例):带有类型转换的函数指针fnptr-dynamic-call(5 个示例):动态解析的函数调用fnptr-global-array(6 个示例):全局数组中的函数指针fnptr-global-struct-array(12 个示例):全局结构数组中函数指针fnptr-global-struct(11 个示例):全局结构中的函数指针fnptr-library(20 个示例):库接口中的函数指针fnptr-only(12 个示例):没有复杂模式的基本函数指针调用fnptr-struct(14 个示例):存储在结构中的函数指针fnptr-varargs(1 个示例):带有可变参数的函数指针fnptr-virtual(1 个示例):C 语言中的虚拟函数式模式
数据集内容
示例格式
每个示例遵循一致的结构:
示例 N
调用点
函数指针调用的完整路径和位置
fnptr: function_pointer_name targets: target_function1, target_function2, ...
相关代码片段
c // 显示函数指针使用的相关代码上下文
数据提取
要生成结构化 JSON 数据集:
bash python3 extract_from_markdowns.py
数据格式
生成的 JSON 遵循以下结构:
json { "project_name": { "callsite_path": { "callsite": "function_pointer_name", "type": "category", "chain_summary": [ { "source_code": ["line1", "line2", ...], "parent": "" } ], "callees": { "targets": { "target_function": "" } } } } }
基准统计
- 总示例数:104
- 项目类别:7 个主要开源项目
- 函数指针模式:11 个不同类别
- 代码上下文:每个示例多个代码片段显示使用模式
- 真实世界复杂性:来自生产代码库的示例
使用案例
该基准设计用于:
- LLM 评估:评估语言模型理解复杂代码模式的能力
- 工具开发:用于调用图构建的静态分析工具基准测试
- 研究:研究真实世界代码库中的函数指针解析
- 教育:理解 C/C++ 中各种函数指针使用模式
许可信息
该项目采用 MIT 许可证 - 详见 LICENSE 文件。
引用信息
如果研究中使用了此基准,请引用:
bibtex @inproceedings{cgbench2025, title={CG-Bench: Can Language Models Assist Call Graph Construction in the Real World?}, author={[Authors]}, booktitle={Proceedings of the 1st ACM SIGPLAN International Workshop on Language Models for Programming (LMPL 2025)}, year={2025}, publisher={ACM}, address={New York, NY, USA}, url={https://conf.researchr.org/home/icfp-splash-2025/lmpl-2025}, note={Co-located with SPLASH 2025} }




