Valgrind/Callgrind中--toggle-collect选项无法正常工作的问题咨询
问题原因分析
1. 函数名完全不匹配
你命令中指定的--toggle-collect=fun,但示例代码里的目标函数是fun1,Callgrind会严格匹配符号表中的函数名,名称不一致直接导致规则无法触发。
2. 错误的参数格式
--toggle-collect只需要传入纯函数名,不需要添加返回类型(比如void fun、int main这种写法是错误的)。Callgrind识别的是编译后符号表中的函数标识,返回类型不属于符号名的一部分,多余的前缀会让匹配彻底失效。
3. 额外注意事项(可能的隐性问题)
如果修正以上两点后仍然无效,需要检查编译选项:
- 不要使用
-O2及以上优化级别:高优化可能会将函数内联,导致符号表中无法找到目标函数; - 不要使用
-strip或-s参数:这会剥离符号表,Callgrind无法识别任何函数名。
正确命令示例
valgrind --tool=callgrind --callgrind-out-file=callgrind.out --toggle-collect=fun1 -v a.out
内容的提问来源于stack exchange,提问作者ravi
相关产品推荐
相关产品推荐

