GNU gprof默认显示秒级调用耗时,如何改为毫秒级?
解决gprof Flat Profile耗时单位从秒改毫秒的问题
gprof的单位显示是自动适配的——当函数单次调用耗时超过1秒时,会自动切换为秒(s/call);耗时低于1秒就显示毫秒(ms/call),这是工具内置的逻辑,不是你遗漏了什么选项。
想改成固定毫秒单位,有两个可行办法:
- 手动换算:直接把输出里的
s/call数值乘以1000即可,比如0.8 s/call对应800 ms/call,简单直接。 - 修改源码重编译:要是非得让工具直接输出毫秒,就得改动gprof的源码:找到负责单位判断的代码块(一般在
flat_profile.c文件中),注释掉自动切换单位的分支逻辑,强制统一使用毫秒作为单位,之后重新编译替换系统中的gprof版本。
你也可以做个小验证:写一个单次调用耗时小于1秒的测试函数(比如用usleep(300000)模拟300毫秒耗时),用-pg编译运行后生成gprof报告,此时就能看到ms/call的单位,这也能直观验证工具的自适应单位逻辑。
内容的提问来源于stack exchange,提问作者Pato Srna
相关产品推荐
相关产品推荐

