clang:如何获得源代码信息,同时在OS X中分析

问题描述:

我使用clang 703.0.31编译了一个基准。首先用-c -flto -O3 -g(以及其他一些标志)将所有源代码编译成目标文件,然后用-g -flto将它们使用相同的clang(使用Apple LLVM 7.3.0,使用ld)链接到可执行文件中。 当我试图剖析可执行文件时,我可以看到函数名称和反汇编器,但是它与源代码之间没有对应关系。 该exe的dsymutil产生这样的结果: 警告:(x86_x64)/tmp/lto.o无法打开目标文件:没有这样的文件或目录 警告:在可执行文件中没有调试符号(-arch x86_64) 任何想法我是什么我错过了? (注:我一般在Windows上工作,我对OS X的知识接近于0)clang:如何获得源代码信息,同时在OS X中分析

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

您应该使用-O0 -g进行调试。见this

+3

用'-O0'分析是毫无意义的 –

+0

@BryanChen:我很好奇为什么......? –

+0

@ l'l l因为您想知道运输产品的性能,而不是开发版本。否则,您可能会发现开发版本的关键路径通过“-O3”完成了优化。 –

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

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

我还没有使用过ICC,但是从它的文档中看到它看起来像一样,它可以在优化时产生debuginfo。

+0

因为距离正确还有很长的路要走,所以我低估了你的答案。 –

在其他地方推荐的其中一种解决方法适用于我:我创建了xcode项目并重新编译了二进制文件。在那之后,调试信息足以用仪器进行配置。