LLVM Xray报错‘Unsupported version...768’排查求助
LLVM XRay 版本不兼容问题排查思路
问题概述
我正在代码库中配置LLVM XRay,目标是仅插桩少量函数以降低侵入性,但基础示例运行就出现问题。用clang 14.0.6编译测试代码后,按文档设置环境变量运行生成了trace文件,但执行llvm-xray account分析时报错:
Unsupported version for Basic/Naive Mode logging: 768
排查发现:二进制插桩信息正常,但trace文件版本为0x0300,而LLVM源码显示当前llvm-xray仅支持0x01(basic模式)和0x02(fdr模式)版本。已在LLVM项目提交issue,求可行解决思路。
复现步骤
测试代码
// test.cpp [[gnu::noinline]] int doit() { return 0; } int main() { for ( int j=0; j<100000000; ++j ) { doit(); } }
编译命令
$ clang++ -O3 test.cpp -fxray-instrument -fxray-instruction-threshold=1 -o test
运行命令
$ XRAY_OPTIONS="patch_premain=true xray_mode=xray-basic verbosity=3" ./test
分析命令
$ llvm-xray account --instr_map=./test xray-log.test.ym8oWP
解决思路
- 校验工具链版本一致性:确保
llvm-xray与clang为同一版本(14.0.6),避免混用不同版本工具导致的兼容性冲突。 - 切换日志模式:尝试改用FDR模式运行,修改环境变量为
XRAY_OPTIONS="patch_premain=true xray_mode=xray-fdr verbosity=3",生成trace文件后再用llvm-xray account分析,看是否能规避版本问题。 - 强制生成旧版本trace:检查是否有
XRAY_OPTIONS参数或编译选项可强制生成0x01版本的trace文件,部分LLVM版本支持通过配置控制输出版本。 - 升级LLVM工具链:升级到LLVM 15及以上版本,新版本大概率已修复版本兼容问题,支持0x0300版本的trace文件解析。
- 修改源码适配版本:若必须使用当前LLVM 14版本,可修改
llvm-xray源码中的版本检查逻辑,添加对0x0300版本的支持,重新编译工具链。
内容的提问来源于stack exchange,提问作者Henrique Bucher
相关产品推荐
相关产品推荐

