clang:如何在OS X中进行性能分析时获取源代码信息

3
我使用clang 703.0.31编译了一个基准测试。首先使用-c -flto -O3 -g(和其他一些标志)将所有源文件编译成目标文件,然后使用相同的clang(使用Apple LLVM 7.3.0,使用ld)将它们链接到一个可执行文件中,使用-g -flto。 当我尝试对可执行文件进行分析时,可以看到函数名称和反汇编,但是它们与源代码之间没有对应关系。 对该exe运行dsymutil会产生以下结果: 警告:(x86_x64)/tmp/lto.o无法打开对象文件:没有那个文件或目录 警告:可执行文件中没有调试符号(-arch x86_64) 有什么想法吗?(注意:我通常在Windows上工作,对OS X的了解接近于0)
3个回答

0

在其他地方建议的解决方法中,有一个对我有效:我创建了Xcode项目并重新编译了二进制文件。之后,调试信息足够好,可以使用Instruments进行分析。


-1

您正在使用-O3选项,该选项明确告诉编译器应以最佳方式优化指令。因此,编译器将重新排列这些指令,可能会破坏源代码和可执行文件之间的对应关系。

调试时应使用-O0 -g。请参见this


@BryanChen:我很好奇为什么...? - l'L'l
因为您想了解运输产品的性能,而不是开发版本。否则,您可能会发现开发版本的关键路径被 -O3 优化后完成了。 - Bryan Chen
这是一种看待问题的方式,但我认为 profiling 比仅仅优化方面更有意义。有时候,不进行优化可以提供更多的调试数据,在某些情况下非常有帮助。 - l'L'l
重新排列指令是可以的,汇编和源代码之间仍然会有一些对应关系。我无法获得任何符号——fullSourcepath 没有显示任何内容。@l'L'l:至于 O0:不,我需要查看 O3 优化代码。 - Natalia Glagoleva

-2

与GCC不同,clang在优化时无法生成debuginfo。

由于你正在进行性能分析,禁用优化会破坏你试图收集的信息。因此,你必须使用另一个编译器来完成这个任务。

我没有使用ICC,但是从文档中看起来它可以在优化时生成debuginfo。


我给你的答案点了个踩,因为它与正确答案相差甚远。 - l'L'l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接