【问题标题】:No symbols/source for external library in Xcode 4Xcode 4 中没有外部库的符号/源
【发布时间】:2012-10-05 10:40:10
【问题描述】:

我的应用程序没有看到库的源代码:

  • 如果我在库方法上“跳转到定义”,XCode 会将我带到 .h 文件,但说没有 .cpp 对应项
  • 调试时,我看不到源代码,并且库的大部分调用堆栈都丢失了:
  • 我已确保未选中“调试时显示反汇编”

我将库构建为 DEBUG,然后将 headers+.a 文件打包到 SDK 目录中。所以我想我也需要将调试文件复制到该 SDK 目录中,或者告诉我的应用程序在哪里查找。我也不知道该怎么做。

为了澄清,我的应用程序项目不维护对库项目的引用,仅对 .a 文件和标头目录进行引用。这是因为库项目是由 CMake 创建的,我不想修改它。

【问题讨论】:

  • 库是否在您正在调试的机器上编译?源文件是否与使用调试信息编译库时的位置相同?在构建库时,您为编译器提供了哪些调试标志?
  • 是的,它是在同一台 Mac 上独立编译的,但我只是告诉应用程序项目 .a 和标头在哪里。源 .cpp 文件没有移动,但我移动了标头和 .a 文件以创建 SDK;有绝对路径之类的吗? Xcode 在哪里以及如何存储这些信息?
  • 你解决过这个问题吗?我在这里有一个类似的问题:stackoverflow.com/questions/18903782/…

标签: ios xcode debugging xcode4


【解决方案1】:

首先,您应该检查静态库的 .debug_str 部分以验证它是否包含适当的调试信息。

尝试在终端上运行这个命令:

xcrun dwarfdump /path/to/library.a | grep "\.m"

您应该会看到打印出一堆源 (.m) 文件路径。从理论上讲,当您在调试器中停止时,Xcode 会在此处查看,因此请确保此处的路径正确。如果您没有看到任何路径,则需要在构建库时将适当的调试标志(例如 -g 传递给编译器。

如果路径不正确,或者您想将它们指向其他位置,您可以在 CMake 中将它们作为构建过程的一部分进行修改,例如使它们相对于您的项目目录。尝试查看“Make gcc put relative filenames in debug information”,它使用 CMake 来调整这些调试路径。

【讨论】:

  • 仅供参考,这是一个 C++ 应用程序,但我假设我只是将 .m 替换为 .cpp 我你的答案?
  • 当我使用“\.m”或“\.cpp”运行它时,我根本没有得到任何输出。你能仔细检查一下这是正确的吗?我的调试库是 650Mb,而发布版本是 30Mb,所以我很确定它是作为调试工具构建的!
  • 这个问题有什么进展吗?我在这里遇到了类似的问题:stackoverflow.com/questions/18903782/…
  • 我正在构建一个小型库,将 -g 添加到编译器,但 xcrun dwarfdum mylib 命令没有显示任何内容(所有部分都为“空”)。在进行“清理”然后再次构建后它起作用了。在(完全)重建与该 .a 文件链接的主项目之后,我确实可以从 xcode-debugger 进入它!
  • 感谢您,即使在今天也很有帮助。您知道创建库后重新映射路径的方法吗?从已安装的二进制文件中导入第三方库 (Qt),并尝试通过它进行调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多