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

为Ruby添加带参数的perf探针失败,报错无此文件或目录

Ruby perf探针获取ci->mid失败的排查方案

问题回顾

  • 无参数探针可正常创建:
    perf probe -x $(command -v ruby) --add 'vm_search_method.isra.0'
    
  • 尝试获取rb_call_info结构体的mid字段时失败:
    perf --debug verbose=10 probe -x $(command -v ruby) --add 'vm_search_method.isra.0 ci->mid:u64'
    
  • 报错信息:
    An error occurred in debuginfo analysis (-2).
      Error: Failed to add events. Reason: No such file or directory (Code: -2)
    

排查步骤

1. 确认Ruby是否带有完整调试信息

perf探针依赖目标程序的调试符号(debuginfo)解析结构体成员,多数发行版默认Ruby包不带完整调试信息:

  • Debian/Ubuntu系:安装ruby-dbg或ruby-debuginfo包
  • RHEL/CentOS系:安装ruby-debuginfo包
  • 源码编译Ruby时,需添加--enable-debug参数生成调试符号

2. 验证ci变量的可见性

用perf probe --vars确认函数内是否能访问到ci变量:

perf probe -x $(command -v ruby) --vars 'vm_search_method.isra.0'

如果输出中没有ci,说明编译器优化(isra.0是内联优化后的函数版本)或调试符号缺失导致变量被隐藏。

3. 核对结构体成员路径正确性

通过GDB确认rb_call_info的结构定义:

gdb $(command -v ruby)
(gdb) ptype struct rb_call_info

检查mid是否为直接成员,以及ci的类型是否为struct rb_call_info*,路径错误会直接导致解析失败。

4. 检查perf与内核版本兼容性

旧版本perf对复杂结构体成员的解析支持有限,建议升级perf到最新稳定版,同时确保内核版本≥4.10(该版本对探针语法支持更完善)。

5. 确认tracefs挂载与权限

虽然/sys/kernel/tracing/README存在,仍需检查tracefs挂载状态:

mount | grep tracefs

未挂载时执行:

mount -t tracefs nodev /sys/kernel/tracing

同时用sudo执行perf命令,排除权限不足的可能性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:42