You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试修改版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

解决方法

  1. 直接运行libgcc专属测试目标
    不要依赖check-gcc,直接执行libgcc的专用测试命令:

    make check-target-libgcc
    

    这个目标会单独运行libgcc子项目的测试套件,覆盖unwind机制等核心逻辑的用例。

  2. 精准指定unwind相关测试
    如果需要聚焦unwind模块的测试,用RUNTESTFLAGS筛选libgcc的测试文件:

    make check-target-libgcc RUNTESTFLAGS="libgcc.exp=*unwind*"
    

    也可以直接指定具体测试脚本(如unwind-dw2.exp,需根据源码版本确认存在性)。

  3. 验证修改后的libgcc是否生效
    测试前务必确认系统中安装的是你修改后的版本:

    • 找到libgcc_s.so的安装路径(通常在/usr/local/lib64/或自定义安装目录)
    • 用objdump -d查看该文件,确认修改的代码已编译进去
  4. 手动编写针对性测试程序
    如果官方测试覆盖不足,可自行编写调用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,程序会崩溃或无法正确捕获异常。

  5. 检查测试框架依赖
    确保已安装测试所需的dejagnu框架,否则测试套件无法正常运行:

    sudo apt install dejagnu
    

内容的提问来源于stack exchange,提问作者Sigmarionid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:02