clang:如何在 OS X 中分析时获取源信息

clang: How to get source info while profiling in OS X

本文关键字:获取 源信息 OS clang      更新时间:2023-10-16

我使用 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)

其他地方建议的解决方法之一对我有用:我创建了 xcode 项目并重新编译了二进制文件。之后,调试信息足以用仪器对其进行分析。

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

应使用 -O0 -g 进行调试。看到这里。

与 GCC 不同,clang 在优化时无法生成调试信息。

由于您正在分析,因此禁用优化会破坏您尝试收集的信息。因此,您必须为此任务使用另一个编译器。

我没有使用过ICC,但是从文档中,它可以在优化时生成调试信息。