测试修改版libgcc:寻求专用测试套件的技术问询
问题:修改libgcc后无法通过现有测试检测bug
我从GitHub镜像仓库获取gcc源码,修改了./libgcc/unwind-dw2-fde.c(植入了assert(false)、污染malloc返回值等故意bug),但执行make -k check-gcc甚至指定RUNTESTFLAGS="exceptions.exp=*"后,正常版本和篡改版本的测试输出完全一致,无法检测出bug。是否存在专门针对libgcc的测试套件?
我的构建测试步骤如下:
# 在gcc-build目录中执行,已完成项目其余部分构建 # (且已篡改unwind-dw-fde.c): make all-target-libgcc sudo make install-target-libgcc # 无论是正常版本还是故意破坏的 unwind 版本,输出结果一致: make check-gcc > check-gcc.log make check-gcc RUNTESTFLAGS="exceptions.exp=*" > check-gcc-excepts.log
平台信息:
## --------- ## ## Platform. ## ## --------- ## hostname = ******-Ubuntu24 uname -m = x86_64 uname -r = 6.8.0-52-generic uname -s = Linux uname -v = #53-Ubuntu SMP PREEMPT_DYNAMIC Sat Jan 11 00:06:25 UTC 2025 /usr/bin/uname -p = x86_64 /bin/uname -X = unknown /bin/arch = x86_64 /usr/bin/arch -k = unknown /usr/convex/getsysinfo = unknown /usr/bin/hostinfo = unknown /bin/machine = unknown /usr/bin/oslevel = unknown /bin/universe = unknown
解决方法
直接运行libgcc专属测试目标
不要依赖check-gcc,直接执行libgcc的专用测试命令:make check-target-libgcc这个目标会单独运行libgcc子项目的测试套件,覆盖unwind机制等核心逻辑的用例。
精准指定unwind相关测试
如果需要聚焦unwind模块的测试,用RUNTESTFLAGS筛选libgcc的测试文件:make check-target-libgcc RUNTESTFLAGS="libgcc.exp=*unwind*"也可以直接指定具体测试脚本(如
unwind-dw2.exp,需根据源码版本确认存在性)。验证修改后的libgcc是否生效
测试前务必确认系统中安装的是你修改后的版本:- 找到
libgcc_s.so的安装路径(通常在/usr/local/lib64/或自定义安装目录) - 用
objdump -d查看该文件,确认修改的代码已编译进去
- 找到
手动编写针对性测试程序
如果官方测试覆盖不足,可自行编写调用unwind逻辑的测试代码,比如:#include <iostream> using namespace std; void nested_throw() { throw "Unwind test"; } void caller() { nested_throw(); } int main() { try { caller(); } catch(const char* msg) { cout << "Caught: " << msg << endl; } return 0; }编译运行后,若unwind代码存在bug,程序会崩溃或无法正确捕获异常。
检查测试框架依赖
确保已安装测试所需的dejagnu框架,否则测试套件无法正常运行:sudo apt install dejagnu
内容的提问来源于stack exchange,提问作者Sigmarionid
相关产品推荐
相关产品推荐

