XCode 找不到特定 iOS 库/框架项目的符号

Posted

技术标签:

【中文标题】XCode 找不到特定 iOS 库/框架项目的符号【英文标题】:XCode can't find symbols for a specific iOS library/framework project 【发布时间】:2016-07-10 21:43:59 【问题描述】:

在一个相当大的 ios 项目中,我在特定库/框架(Xcode 的新手——我不确定正确的术语是什么)的源代码中遇到断点问题。我有这个库的所有代码。断点在其他任何地方都可以正常工作,但是在这个特定的库中,所有断点都被忽略了。

我可以在从其中一个源文件中调用的函数中放置一个断点,它会触发,但随后调用堆栈会在我感兴趣的文件中的位置显示“__lldb_unnamed_function”,就好像符号有被剥夺。

我对相关库有以下设置

Generate Debug Symbols = YES
Strip Debug Symbols During Copy = NO
Strip Linked Product = NO
Dead Code Stripping = NO 

我一直在使用很多#ifdefs 来测试一些函数的替代实现,所以我认为有些东西可能会被意外标记为死代码(因此最后一个设置)。我已经尝试过清理/重建。我尝试从目标 iPhone 中完全删除该应用程序。我尝试删除

下的中间文件夹
/Library/Developer/Xcode/DerivedData

代码肯定正在执行,因为我所有的 NSLog 调用都正确显示。

我对 Xcode 没有太多经验,所以我希望我只是缺少一些简单的东西

谢谢

【问题讨论】:

尝试设置符号断点 谢谢,我尝试了几种方法的符号断点,但没有一个被触发。不得不查找如何设置它们:link 我确实遇到过同样的问题,它是由上面提到的缓存问题引起的。你尝试的方法当时帮助了我。您是否还尝试清理 Build 文件夹(当 Xcode 产品菜单下拉时按 Cmd 键)? 谢谢,我不知道那个命令。尽管您似乎必须按住 Option/Alt,而不是 Cmd。我试了一下,但没有帮助。 Clean 和 Clean Build Folder link 的区别 你说得对,我的意思当然是 Alt 键) 【参考方案1】:

您的构建过程的某些部分必须剥离此二进制文件。如果您正在生成一个没有调试信息的未剥离二进制文件,那么您会在回溯等中看到完整的符号名称,您只是没有它们的调试信息。

找出谁在做这件事的唯一好方法是查看 Xcode 中的完整构建日志,然后展开每个阶段并仔细检查所有构建阶段以找出谁在做这件事。您通过将鼠标悬停在 RHS 上的每个构建行上来扩展阶段,您将获得一个看起来像页面上的一堆行的披露 dingus;点击查看真正的命令。

解决这个问题的另一种方法可能是为这个框架构建 dSYM(通过将调试格式设置为“DWARF + dSYM”。)这应该在任何东西被剥离之前完成,所以除非是谁在剥离它是非常聪明的这应该会保留调试信息。

【讨论】:

以上是关于XCode 找不到特定 iOS 库/框架项目的符号的主要内容,如果未能解决你的问题,请参考以下文章

找不到 -lAFNetworking 的 xcode 库

将框架添加到 Xcode 项目

Dlib 库在 iOS 项目(Xcode 8)中找不到任何 STL 模板

Xcode - dyld:找不到符号:__vtcOnSessionStart

找不到链接sqlite3的Xcode 8符号

带有空格问题的 Xcode 项目/应用程序名称 - 找不到框架