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

Clang Coverage生成空default.profraw文件问题排查求助

Clang Coverage生成空profraw文件问题排查

问题描述

我正在对某库进行模糊测试(fuzz testing),使用Clang coverage获取代码覆盖率。编译smp-fuzzer-cov时已添加-fprofile-instr-generate -fcoverage-mapping编译选项,执行的命令如下:

m smp-fuzzer-cov
LLVM_PROFILE_FILE="/scratch/smp-fuzzer-out/default.profraw" $AOSP/out/host/linux-x86/bin/smp-fuzzer-cov /scratch/smp-fuzzer-out/inputs/*

但生成的default.profraw文件始终为空。多次尝试让模糊测试运行1小时后手动用Ctrl+C终止,文件仍为空。请问是手动终止导致的,还是存在其他原因?

排查分析

1. 手动终止(Ctrl+C)的影响

Ctrl+C发送SIGINT信号,Clang的profile生成机制默认在进程正常退出时才会把缓存的profile数据写入文件。如果进程被SIGINT终止,可能会导致数据未写入,但你运行了1小时,正常来说至少会有部分缓存数据落地,所以大概率不是单纯手动终止的问题。

2. 其他核心排查点

  • 编译选项未生效:
    验证smp-fuzzer-cov是否真的包含覆盖率编译选项,执行:

    nm $AOSP/out/host/linux-x86/bin/smp-fuzzer-cov | grep "__llvm_profile"
    

    无输出则说明编译选项没加上,需要检查编译脚本/Makefile是否正确传递了-fprofile-instr-generate -fcoverage-mapping参数。

  • 路径权限不足:
    检查/scratch/smp-fuzzer-out/目录是否有写入权限,执行:

    touch /scratch/smp-fuzzer-out/test_perm.txt
    

    若失败,需调整目录权限或更换输出路径。

  • Fuzzer未执行目标代码:
    确认传入的inputs/*是有效用例,fuzzer是否真的触发了目标库的代码逻辑。可通过添加调试日志或用strace跟踪系统调用,验证是否有调用目标库函数。

  • 环境变量未正确传递:
    检查LLVM_PROFILE_FILE是否被fuzzer进程继承,修改命令为:

    LLVM_PROFILE_FILE="/scratch/smp-fuzzer-out/default.profraw" env | grep LLVM_PROFILE_FILE && $AOSP/out/host/linux-x86/bin/smp-fuzzer-cov /scratch/smp-fuzzer-out/inputs/*
    

    若输出为空,改用export提前设置环境变量:

    export LLVM_PROFILE_FILE="/scratch/smp-fuzzer-out/default.profraw"
    $AOSP/out/host/linux-x86/bin/smp-fuzzer-cov /scratch/smp-fuzzer-out/inputs/*
    
  • 版本不兼容:
    确保编译fuzzer的Clang版本与系统中llvm-profdata的版本一致,版本不匹配可能导致profile数据无法正常生成。

3. 快速验证方法

设置fuzzer自动退出条件(比如限制运行时长、处理完所有输入后退出),观察正常退出后是否生成非空的profraw文件。如果仍为空,可彻底排除手动终止的问题,专注其他排查点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:47:50