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

如何让Valgrind为rustc打印最终工具统计信息?

Valgrind处理rustc时无法输出最终统计信息的原因分析

现象复现

使用Valgrind的lackey工具处理C程序时能正常输出统计信息:

$ valgrind -q --tool=lackey --basic-counts=yes whoami
yugr
==3668989== Counted 0 calls to main()
==3668989==
==3668989== Jccs:
==3668989==   total:         166,636
==3668989==   taken:         61,832 (37%)
...

但处理rustc时无任何统计输出:

$ valgrind --tool=lackey --basic-counts=yes rustc --version
rustc 1.87.0 (17067e9ac 2025-05-09)
# 此处无任何输出

即使替换rustc的main函数为极简实现,问题依然存在:

pub fn main() {
    safe_println!("Hello");
}

问题根源

rustc的启动流程会创建子进程来执行实际任务(包括版本信息查询、编译等),而Valgrind默认仅跟踪初始启动的父进程。当父进程完成子进程启动后提前退出,Valgrind会终止监控,不会等待子进程执行完毕,因此无法收集到实际执行代码的统计数据。

解决方法及原理

添加--trace-children=yes参数即可解决问题,这个参数会让Valgrind跟踪目标进程创建的所有子进程,从而捕获到rustc实际工作的子进程的执行数据,在子进程结束后正常输出统计信息。

需要注意的是,普通Rust程序不会有这种fork子进程的启动逻辑,因此能被Valgrind正常跟踪。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:12:08