【问题标题】:clang: How to get source info while profiling in OS Xclang:如何在 OS X 中进行分析时获取源信息
【发布时间】:2016-06-09 02:17:59
【问题描述】:

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

【问题讨论】:

    标签: c++ macos clang llvm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • @BryanChen:我很好奇为什么...?
      • @l'L'l 因为你想知道出货产品的性能,而不是开发版本。否则你可能会发现开发版本的关键路径被-O3优化出来了。
      • 这是一种看待它的方式,但是,我认为分析不仅仅是优化方面。有时查看未经优化的代码会做什么很有帮助,因为它可以提供更多调试数据以在某些情况下使用。
      • 重新排列指令没问题,asm和source之间的一些对应关系仍然存在。我什么也得不到:symbols -fullSourcepath 没有显示任何东西。 @l'L'l:至于 O0:不,我需要看看 O3 优化的代码。
      【解决方案3】:

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

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

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

      【讨论】:

      • 我对你的答案投了反对票,因为它离正确还有很长的路要走。
      猜你喜欢
      • 2015-12-01
      • 2015-12-14
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2010-10-02
      • 2015-11-05
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多