【发布时间】:2015-12-30 13:09:49
【问题描述】:
我想使用 valgrind 来分析我的代码。问题是,我有一个我不感兴趣的庞大启动序列。
我在 valgrind/callgrind.h 中找到了对我有帮助的定义:
- CALLGRIND_START_INSTRUMENTATION
- CALLGRIND_STOP_INSTRUMENTATION
- CALLGRIND_DUMP_STATS
根据this article,我必须使用以下选项执行 valgrind:
valgrind --tool=callgrind --instr-atstart=no ./application
当我这样做时,会创建两个文件:
- callgrind.out.16060
- callgrind.out.16060.1
然后我想使用 kcachegrind 来可视化我的结果。这很好用,但跳过我的启动序列的 makros 似乎什么也没做。我必须做些什么才能仅在我想要的地方衡量性能?
【问题讨论】:
-
所以,需要明确的是,您的问题不在于检测是否会损害性能,而只是您不希望从它们那里获取数据。那是对的吗?是什么让你认为宏什么也没做?您是否从启动序列中获取检测数据?
-
对,我不想记录数据。由于大多数列出的函数都显示了构造函数和“init()”或“config”等函数,因此很难找到我的代码的“运行时相关部分”。
-
当您以
--instr-atstart=no开头时,您会看到调用CALLGRIND_START_INSTRUMENTATION之前的数据?我会确保你编译/运行了正确的代码,查看了正确的 callgrind.out 文件,等等。 -
是的,我清理并重新编译了整个项目。我的代码看起来像这样 void App::setup() { m_ComplexSystem.config(); CALLGRIND_START_INSTRUMENTATION; m_ComplexSystem.run(); CALLGRIND_STOP_INSTRUMENTATION; CALLGRIND_DUMP_STATSM }
-
我认为您正在查看错误的
callgrind.out.*文件。你试过在他们两个上运行kcachegrind吗?
标签: c++ valgrind callgrind kcachegrind