【问题标题】:Application plugin fails at any optimization level other than -o0 OSX应用程序插件在 -o0 OSX 以外的任何优化级别都失败
【发布时间】:2013-10-24 07:41:13
【问题描述】:

在 XCode4 下构建应用程序插件时遇到了一个非常奇怪的问题。 (苹果 LLVM 4.2) 有问题的项目为外部应用程序构建了一个插件文件,该文件基本上是一个包,但具有不同的扩展名。 该插件本身正在对视频流进行一些操作,并且具有相当高的吞吐量要求,因此需要适当优化的代码。

但是,一旦我启用除无 [-O0] 以外的任何优化级别,应用程序将永远加载我的插件,因此我的插件永远不会被使用。 从我目前的调试来看,我看不到我的代码失败的任何明显位置, 或与未优化的代码版本相比采用不同的路径。 早期版本的代码用于在 Xcode3 下使用优化编译良好, 但是添加新功能需要更高的性能,并且不再可以接受不使用优化。

所以我希望有人可以提供一些调试/跟踪此问题的提示? 这都是非常标准的 C++,带有一些 pthreads 的东西。 遗憾的是,我还没有针对这种特殊情况开发调试技能或技巧。

主机应用程序确实提供了一个示例项目,该项目在启用优化的情况下可以正常编译。但是我正在寻找调试技术方法,而不是简单地逐行重建我的项目以尝试找到有问题的代码。

提前致谢,

詹姆斯。

PS。很好,这是我在这里的第一篇文章。顺便说一句,很棒的资源。

【问题讨论】:

  • 我真的不知道这种情况的任何细节,但这里有一些建议从哪里开始寻找: 1:尝试编译具有不同优化级别的不同文件(如果您的文件中有多个文件)插件)并确定它是否只是优化导致问题的一个文件(您甚至可以通过使用#pragmas 为每个函数设置优化来进一步分解它)。 2:尝试在主机进程上运行 gdb 并在插件长时间加载期间暂停,以查看它在哪里花费了所有时间。
  • 哦,谢谢,我没有想到要在不同的优化级别编译特定文件,这将是一个很大的帮助。

标签: xcode macos optimization compiler-construction


【解决方案1】:

我认为 cobbal 已经提供了一个合适的答案, IE。尝试逐个文件启用优化。

我已经尝试过了,现在我有插件编译包含 CPU 密集型代码的文件,并通过优化进行编译,我还发现了哪个文件包含有问题的代码。

在逐个文件的基础上选择性地启用编译选项,可以成为一个强大的调试工具。

那么感谢 cobbal。

(不知道如何称赞他提供了正确的答案)

【讨论】:

  • 对于它的价值,如果一个文件在优化下失败,它很可能有某种微妙的错误在优化下暴露出来。仔细查看那个文件,可能是clang --analyze,看看是否有什么不对劲的地方。
猜你喜欢
  • 1970-01-01
  • 2014-01-30
  • 2015-07-05
  • 1970-01-01
  • 2011-04-20
  • 2013-01-04
  • 1970-01-01
  • 2012-11-05
  • 2023-03-12
相关资源
最近更新 更多