我对这个已经咬牙切齿了...
我需要在 ARM 板上进行分析并需要查看调用图。我尝试使用 OProfile、Kernel perf 和 Google 性能工具。一切正常,但不输出任何调用图信息。
这使我得出结论:我没有正确编译代码。
我在编译 C++ 代码时使用以下标志:
拱门具体:
-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3
General:
-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra
调试(带优化):
-O2 -g -fno-omit-frame-pointer
我做了很多谷歌搜索并找到了一些相关主题:
- 利本风?
- dwarf
- (异步)展开表
-mapcs-frame
然而我并不完全理解这些是如何联系在一起的。有关如何使调用图正常工作的任何提示?
注意(由于 Rian 的回答):我有兴趣了解某些方法是否以及为什么在 ARM 上比 x86-64 花费更长的时间(相对于其他方法)。在不同的平台上执行此操作没有帮助(即使我的代码可以在两个平台上编译并且我可以在 x86-64 上执行调用图)。
我知道您想在 ARM cortex-A8 上进行分析,但如果您对调用图感兴趣,为什么不针对 x86 进行编译并运行 valgrind 的 callgrind 工具并使用 kcachegrind 检查结果呢?
两种架构之间的调用图应该相同,即使它们编译函数的方式略有不同,函数之间的关系也不应该改变。
不需要特殊标志:
valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)